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, |
| ︙ |