| OLD | NEW |
| 1 #include "pthread_impl.h" | 1 #include "pthread_impl.h" |
| 2 #include <sys/mman.h> | 2 #include <sys/mman.h> |
| 3 | 3 |
| 4 int __munmap(void *, size_t); | 4 int __munmap(void*, size_t); |
| 5 void __pthread_testcancel(void); | 5 void __pthread_testcancel(void); |
| 6 int __pthread_setcancelstate(int, int *); | 6 int __pthread_setcancelstate(int, int*); |
| 7 | 7 |
| 8 int __pthread_join(pthread_t t, void **res) | 8 int __pthread_join(pthread_t t, void** res) { |
| 9 { | 9 int tmp, cs; |
| 10 » int tmp, cs; | 10 __pthread_testcancel(); |
| 11 » __pthread_testcancel(); | 11 __pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs); |
| 12 » __pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs); | 12 if (cs == PTHREAD_CANCEL_ENABLE) |
| 13 » if (cs == PTHREAD_CANCEL_ENABLE) __pthread_setcancelstate(cs, 0); | 13 __pthread_setcancelstate(cs, 0); |
| 14 » while ((tmp = t->tid)) __timedwait_cp(&t->tid, tmp, 0, 0, 0); | 14 while ((tmp = t->tid)) |
| 15 » __pthread_setcancelstate(cs, 0); | 15 __timedwait_cp(&t->tid, tmp, 0, 0, 0); |
| 16 » a_barrier(); | 16 __pthread_setcancelstate(cs, 0); |
| 17 » if (res) *res = t->result; | 17 a_barrier(); |
| 18 » if (t->map_base) __munmap(t->map_base, t->map_size); | 18 if (res) |
| 19 » return 0; | 19 *res = t->result; |
| 20 if (t->map_base) |
| 21 __munmap(t->map_base, t->map_size); |
| 22 return 0; |
| 20 } | 23 } |
| 21 | 24 |
| 22 weak_alias(__pthread_join, pthread_join); | 25 weak_alias(__pthread_join, pthread_join); |
| OLD | NEW |