Differences From Artifact [7ca1a9fd57]:
- File src/threading_pthread.m — part of check-in [90f2f05c2c] at 2014-07-23 23:09:25 on branch trunk — threading: Prevent possible division by zero (user: js, size: 4115) [annotate] [blame] [check-ins using]
To Artifact [967081c426]:
- File
src/threading_pthread.m
— part of check-in
[52e02c06ca]
at
2014-08-01 12:27:29
on branch trunk
— Change return type for thread main
This changes the return type to void, as the return type of a thread's
main depends on the threading implementation used. For pthreads, it adds
a wrapper function which returns NULL to avoid problems with bogus
return values. For WinAPI threads, the function is just casted, as bogus
return values don't seem to matter there. (user: js, size: 4486) [annotate] [blame] [check-ins using]
︙ | |||
9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | + + + + + + + + + + + + + + + + + + | * the packaging of this file. * * Alternatively, it may be distributed under the terms of the GNU General * Public License, either version 2 or 3, which can be found in the file * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ struct thread_ctx { void (*function)(id object); id object; }; static void* function_wrapper(void *data) { struct thread_ctx *ctx = data; pthread_cleanup_push(free, data); ctx->function(ctx->object); pthread_cleanup_pop(1); return NULL; } bool of_thread_attr_init(of_thread_attr_t *attr) { pthread_attr_t pattr; if (pthread_attr_init(&pattr) != 0) |
︙ | |||
48 49 50 51 52 53 54 | 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | - + + + | pthread_attr_destroy(&pattr); } return true; } bool |
︙ | |||
85 86 87 88 89 90 91 92 93 | 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | + + + + + + - + | if (pthread_attr_setschedparam(&pattr, ¶m) != 0) return false; if (pthread_attr_setstacksize(&pattr, attr->stackSize) != 0) return false; } if ((ctx = malloc(sizeof(*ctx))) == NULL) return false; ctx->function = function; ctx->object = object; ret = (pthread_create(thread, &pattr, |
︙ |