Lines Matching +full:un +full:- +full:masked
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
43 #include "un-namespace.h"
148 return (-1); in __sigev_check_init()
151 return (sigev_default_thread != NULL) ? 0 : -1; in __sigev_check_init()
197 sn->sn_value = evp->sigev_value; in __sigev_alloc()
198 sn->sn_func = evp->sigev_notify_function; in __sigev_alloc()
199 sn->sn_gen = atomic_fetch_add_explicit(&sigev_generation, 1, in __sigev_alloc()
201 sn->sn_type = type; in __sigev_alloc()
202 _pthread_attr_init(&sn->sn_attr); in __sigev_alloc()
203 _pthread_attr_setdetachstate(&sn->sn_attr, PTHREAD_CREATE_DETACHED); in __sigev_alloc()
204 if (evp->sigev_notify_attributes) in __sigev_alloc()
205 attrcopy(evp->sigev_notify_attributes, &sn->sn_attr); in __sigev_alloc()
208 prev->sn_tn->tn_refcount++; in __sigev_alloc()
210 sn->sn_tn = prev->sn_tn; in __sigev_alloc()
212 sn->sn_tn = sigev_thread_create(usedefault); in __sigev_alloc()
213 if (sn->sn_tn == NULL) { in __sigev_alloc()
214 _pthread_attr_destroy(&sn->sn_attr); in __sigev_alloc()
231 newevp->sigev_notify = SIGEV_THREAD_ID; in __sigev_get_sigevent()
232 newevp->sigev_signo = SIGLIBRT; in __sigev_get_sigevent()
233 newevp->sigev_notify_thread_id = (lwpid_t)sn->sn_tn->tn_lwpid; in __sigev_get_sigevent()
234 newevp->sigev_value.sival_ptr = (void *)id; in __sigev_get_sigevent()
240 _pthread_attr_destroy(&sn->sn_attr); in __sigev_free()
251 if (sn->sn_type == type && sn->sn_id == id) in __sigev_find()
260 int chain = HASH(sn->sn_type, sn->sn_id); in __sigev_register()
282 if (--sn->sn_tn->tn_refcount == 0) in __sigev_delete_node()
283 _pthread_kill(sn->sn_tn->tn_thread, SIGLIBRT); in __sigev_delete_node()
284 if (sn->sn_flags & SNF_WORKING) in __sigev_delete_node()
285 sn->sn_flags |= SNF_REMOVED; in __sigev_delete_node()
294 switch(si->si_code) { in sigev_get_id()
296 return (si->si_timerid); in sigev_get_id()
298 return (si->si_mqd); in sigev_get_id()
300 return (sigev_id_t)si->si_value.sival_ptr; in sigev_get_id()
302 return (-1); in sigev_get_id()
314 sigev_default_thread->tn_refcount++; in sigev_thread_create()
320 tn->tn_cur = NULL; in sigev_thread_create()
321 tn->tn_lwpid = -1; in sigev_thread_create()
322 tn->tn_refcount = 1; in sigev_thread_create()
323 _pthread_cond_init(&tn->tn_cv, NULL); in sigev_thread_create()
330 sigfillset(&set); /* SIGLIBRT is masked. */ in sigev_thread_create()
337 ret = _pthread_create(&tn->tn_thread, &sigev_default_attr, in sigev_thread_create()
351 while (tn->tn_lwpid == -1) in sigev_thread_create()
352 _pthread_cond_wait(&tn->tn_cv, sigev_list_mtx); in sigev_thread_create()
376 thr_self(&tn->tn_lwpid); in sigev_service_loop()
378 _pthread_cond_broadcast(&tn->tn_cv); in sigev_service_loop()
387 if (tn->tn_refcount == 0) { in sigev_service_loop()
394 if (ret == -1) { in sigev_service_loop()
406 sn->sn_info = si; in sigev_service_loop()
407 if (sn->sn_flags & SNF_SYNC) in sigev_service_loop()
408 tn->tn_cur = sn; in sigev_service_loop()
410 tn->tn_cur = NULL; in sigev_service_loop()
411 sn->sn_flags |= SNF_WORKING; in sigev_service_loop()
414 ret = _pthread_create(&td, &sn->sn_attr, worker_routine, sn); in sigev_service_loop()
421 sn->sn_flags &= ~SNF_WORKING; in sigev_service_loop()
422 if (sn->sn_flags & SNF_REMOVED) in sigev_service_loop()
425 } else if (tn->tn_cur) { in sigev_service_loop()
427 while (tn->tn_cur) in sigev_service_loop()
428 _pthread_cond_wait(&tn->tn_cv, sigev_list_mtx); in sigev_service_loop()
444 sn->sn_dispatch(sn); in worker_routine()
457 if (sn->sn_flags & SNF_SYNC) { in worker_cleanup()
458 sn->sn_tn->tn_cur = NULL; in worker_cleanup()
459 _pthread_cond_broadcast(&sn->sn_tn->tn_cv); in worker_cleanup()
461 if (sn->sn_flags & SNF_REMOVED) in worker_cleanup()
464 sn->sn_flags &= ~SNF_WORKING; in worker_cleanup()