MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / sigwait_setup

Function sigwait_setup

mysys/my_pthread.c:130–167  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

128
129
130void sigwait_setup(sigset_t *set)
131{
132 int i;
133 struct sigaction sact,sact1;
134 sigset_t unblock_mask;
135
136 sact.sa_flags = 0;
137 sact.sa_handler = px_handle_sig;
138 memcpy(&sact.sa_mask, set, sizeof(*set)); /* handler isn't thread_safe */
139 sigemptyset(&unblock_mask);
140 pthread_sigmask(SIG_UNBLOCK,(sigset_t*) 0,&rev_sigwait_set);
141
142 for (i = 1; i <= sizeof(sigwait_set)*8; i++)
143 {
144 if (sigismember(set,i))
145 {
146 sigdelset(&rev_sigwait_set,i);
147 if (!sigismember(&sigwait_set,i))
148 sigaction(i, &sact, (struct sigaction*) 0);
149 }
150 else
151 {
152 sigdelset(&px_recd,i); /* Don't handle this */
153 if (sigismember(&sigwait_set,i))
154 { /* Remove the old handler */
155 sigaddset(&unblock_mask,i);
156 sigdelset(&rev_sigwait_set,i);
157 sact1.sa_flags = 0;
158 sact1.sa_handler = SIG_DFL;
159 sigemptyset(&sact1.sa_mask);
160 sigaction(i, &sact1, 0);
161 }
162 }
163 }
164 memcpy(&sigwait_set, set, sizeof(*set));
165 pthread_sigmask(SIG_BLOCK,(sigset_t*) set,(sigset_t*) 0);
166 pthread_sigmask(SIG_UNBLOCK,&unblock_mask,(sigset_t*) 0);
167}
168
169
170int sigwait(sigset_t *setp, int *sigp)

Callers 1

sigwaitFunction · 0.85

Calls 1

sigactionClass · 0.85

Tested by

no test coverage detected