Differences From Artifact [5ab8be6ac9]:
- File
src/platform/posix/thread.m
— part of check-in
[ab0f2cc617]
at
2021-01-14 01:11:21
on branch trunk
— Don't use pthread priorities on HP-UX
Creating a thread with priority 0 (documented to be the default) results
in pthread_create() returning EPERM. This means that priorities are
effectively not usable by normal users. (user: js, size: 4421) [annotate] [blame] [check-ins using] [more...]
To Artifact [59ba7d304a]:
- File src/platform/POSIX/OFPlainThread.m — part of check-in [4a6e3b42f5] at 2021-05-01 03:02:07 on branch trunk — Rename directories in src/platform (user: js, size: 4469) [annotate] [blame] [check-ins using] [more...]
- File src/platform/posix/OFPlainThread.m — part of check-in [35de667566] at 2021-04-18 20:51:25 on branch new-naming-convention — Rename everything in several smaller files (user: js, size: 4469) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
21 22 23 24 25 26 27 | # include <pthread_np.h> #endif #ifdef OF_HAIKU # include <kernel/OS.h> #endif | | > | | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | # include <pthread_np.h> #endif #ifdef OF_HAIKU # include <kernel/OS.h> #endif #import "OFPlainThread.h" #import "macros.h" static int minPrio = 0, maxPrio = 0, normalPrio = 0; struct ThreadContext { void (*function)(id object); id object; const char *name; }; /* * This is done here to make sure this is done as early as possible in the main |
︙ | ︙ | |||
68 69 70 71 72 73 74 | pthread_attr_destroy(&attr); } } static void * functionWrapper(void *data) { | | | | | 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | pthread_attr_destroy(&attr); } } static void * functionWrapper(void *data) { struct ThreadContext *ctx = data; if (ctx->name != NULL) OFSetThreadName(ctx->name); pthread_cleanup_push(free, data); ctx->function(ctx->object); pthread_cleanup_pop(1); return NULL; } int OFPlainThreadAttributesInit(OFPlainThreadAttributes *attr) { int error; pthread_attr_t POSIXAttr; attr->priority = 0; attr->stackSize = 0; |
︙ | ︙ | |||
105 106 107 108 109 110 111 | pthread_attr_destroy(&POSIXAttr); return error; } int | | | | | 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | pthread_attr_destroy(&POSIXAttr); return error; } int OFPlainThreadNew(OFPlainThread *thread, const char *name, void (*function)(id), id object, const OFPlainThreadAttributes *attr) { int error = 0; pthread_attr_t POSIXAttr; bool POSIXAttrAvailable = true; if ((error = pthread_attr_init(&POSIXAttr)) != 0) { if (error == ENOSYS) POSIXAttrAvailable = false; else return error; } @try { struct ThreadContext *ctx; if (attr != NULL && POSIXAttrAvailable) { #ifndef OF_HPUX struct sched_param param; #endif if (attr->priority < -1 || attr->priority > 1) |
︙ | ︙ | |||
180 181 182 183 184 185 186 | pthread_attr_destroy(&POSIXAttr); } return error; } int | | | | | 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | pthread_attr_destroy(&POSIXAttr); } return error; } int OFPlainThreadJoin(OFPlainThread thread) { void *ret; return pthread_join(thread, &ret); } int OFPlainThreadDetach(OFPlainThread thread) { return pthread_detach(thread); } void OFSetThreadName(const char *name) { #if defined(OF_HAIKU) rename_thread(find_thread(NULL), name); #elif defined(HAVE_PTHREAD_SET_NAME_NP) pthread_set_name_np(pthread_self(), name); #elif defined(HAVE_PTHREAD_SETNAME_NP) # if defined(OF_MACOS) || defined(OF_IOS) |
︙ | ︙ |