|
|
| version 1.36, 2024/02/26 12:58:55 | version 1.36.4.1, 2024/03/20 12:48:45 |
|---|---|
| Line 54 char sched_Error[STRSIZ]; | Line 54 char sched_Error[STRSIZ]; |
| #pragma GCC visibility pop | #pragma GCC visibility pop |
| volatile pthread_t sched_sigThr; | |
| // sched_GetErrno() Get error code of last operation | // sched_GetErrno() Get error code of last operation |
| int | int |
| sched_GetErrno() | sched_GetErrno() |
| Line 1074 schedPolling(sched_root_task_t * __restrict root, stru | Line 1076 schedPolling(sched_root_task_t * __restrict root, stru |
| int | int |
| schedTermCondition(sched_root_task_t * __restrict root, intptr_t * __restrict condValue) | schedTermCondition(sched_root_task_t * __restrict root, intptr_t * __restrict condValue) |
| { | { |
| if (!root && !condValue) | if (!root || !condValue) |
| return -1; | return -1; |
| *root->root_cond = *condValue; | *root->root_cond = *condValue; |
| Line 1189 _sched_sigDisp(void *arg) | Line 1191 _sched_sigDisp(void *arg) |
| * | * |
| * @root = root task | * @root = root task |
| * @on = Activate or =0 deactivate | * @on = Activate or =0 deactivate |
| * return: -1 error or 0 ok | * return: -1 error, 1 already started, 2 another thread already started or 0 ok |
| */ | */ |
| int | int |
| schedSignalDispatch(sched_root_task_t * __restrict root, int on) | schedSignalDispatch(sched_root_task_t * __restrict root, int on) |
| Line 1208 schedSignalDispatch(sched_root_task_t * __restrict roo | Line 1210 schedSignalDispatch(sched_root_task_t * __restrict roo |
| #endif | #endif |
| if (!on) { | if (!on) { |
| if (root->root_sigthr) | if (root->root_sigthr) { |
| if (root->root_sigthr == sched_sigThr) { | |
| #ifdef __linux__ | |
| sched_sigThr = 0L; | |
| #else | |
| sched_sigThr = NULL; | |
| #endif | |
| } | |
| pthread_cancel(root->root_sigthr); | pthread_cancel(root->root_sigthr); |
| #ifdef __linux__ | #ifdef __linux__ |
| root->root_sigthr = 0L; | root->root_sigthr = 0L; |
| #else | #else |
| root->root_sigthr = NULL; | root->root_sigthr = NULL; |
| #endif | #endif |
| } | |
| return 0; | return 0; |
| } | } |
| /* if we have already started signal thread, then skip routine */ | |
| if (root->root_sigthr) | |
| return 0; | |
| /* if we have not using polling, then we must turn on */ | /* if we have not using polling, then we must turn on */ |
| if (sched_timespecisinf(&root->root_poll)) | if (sched_timespecisinf(&root->root_poll)) |
| schedPolling(root, &ts, NULL); | schedPolling(root, &ts, NULL); |
| Line 1234 schedSignalDispatch(sched_root_task_t * __restrict roo | Line 1241 schedSignalDispatch(sched_root_task_t * __restrict roo |
| pthread_attr_setschedpolicy(&attr, SCHED_OTHER); | pthread_attr_setschedpolicy(&attr, SCHED_OTHER); |
| #endif | #endif |
| /* if we have already started signal thread, then skip routine */ | |
| if (root->root_sigthr) | |
| return 1; | |
| if (sched_sigThr) | |
| return 2; | |
| sigfillset(&ss); | sigfillset(&ss); |
| pthread_sigmask(SIG_BLOCK, &ss, NULL); | pthread_sigmask(SIG_BLOCK, &ss, NULL); |
| Line 1247 schedSignalDispatch(sched_root_task_t * __restrict roo | Line 1260 schedSignalDispatch(sched_root_task_t * __restrict roo |
| #endif | #endif |
| pthread_sigmask(SIG_SETMASK, &root->root_oldset, NULL); | pthread_sigmask(SIG_SETMASK, &root->root_oldset, NULL); |
| return -1; | return -1; |
| } | } else |
| sched_sigThr = root->root_sigthr; | |
| return 0; | return 0; |
| } | } |