… | |
… | |
60 | } |
60 | } |
61 | |
61 | |
62 | X_THREAD_PROC(l_run) |
62 | X_THREAD_PROC(l_run) |
63 | { |
63 | { |
64 | struct ev_loop *loop = (struct ev_loop *)thr_arg; |
64 | struct ev_loop *loop = (struct ev_loop *)thr_arg; |
65 | udat *u = ev_userdata (loop); |
|
|
66 | |
65 | |
67 | X_LOCK (u->lock); |
66 | l_acquire (EV_A); |
|
|
67 | |
68 | /* yeah */ |
68 | /* yeah */ |
69 | pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0); |
69 | pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0); |
70 | |
70 | |
71 | ev_ref (loop); |
71 | ev_ref (EV_A); |
72 | ev_loop (loop, 0); |
72 | ev_loop (EV_A, 0); |
73 | ev_unref (loop); |
73 | ev_unref (EV_A); |
74 | |
74 | |
75 | X_UNLOCK (u->lock); |
75 | l_release (EV_A); |
76 | |
76 | |
77 | return 0; |
77 | return 0; |
78 | } |
78 | } |
79 | |
79 | |
80 | static void |
80 | static void |