| OLD | NEW | 
|---|
| (Empty) |  | 
|  | 1 #include <unistd.h> | 
|  | 2 #include <string.h> | 
|  | 3 #include <signal.h> | 
|  | 4 #include "syscall.h" | 
|  | 5 #include "libc.h" | 
|  | 6 #include "pthread_impl.h" | 
|  | 7 | 
|  | 8 static void dummy(int x) | 
|  | 9 { | 
|  | 10 } | 
|  | 11 | 
|  | 12 weak_alias(dummy, __fork_handler); | 
|  | 13 | 
|  | 14 pid_t fork(void) | 
|  | 15 { | 
|  | 16         pid_t ret; | 
|  | 17         sigset_t set; | 
|  | 18         __fork_handler(-1); | 
|  | 19         __block_all_sigs(&set); | 
|  | 20 #ifdef SYS_fork | 
|  | 21         ret = syscall(SYS_fork); | 
|  | 22 #else | 
|  | 23         ret = syscall(SYS_clone, SIGCHLD, 0); | 
|  | 24 #endif | 
|  | 25         if (!ret) { | 
|  | 26                 pthread_t self = __pthread_self(); | 
|  | 27                 self->tid = __syscall(SYS_gettid); | 
|  | 28                 self->robust_list.off = 0; | 
|  | 29                 self->robust_list.pending = 0; | 
|  | 30                 libc.threads_minus_1 = 0; | 
|  | 31         } | 
|  | 32         __restore_sigs(&set); | 
|  | 33         __fork_handler(!ret); | 
|  | 34         return ret; | 
|  | 35 } | 
| OLD | NEW | 
|---|