… | |
… | |
627 | #define ECB_MEMORY_FENCE_ACQUIRE __asm__ __volatile__ ("membar #LoadStore | #LoadLoad" : : : "memory") |
627 | #define ECB_MEMORY_FENCE_ACQUIRE __asm__ __volatile__ ("membar #LoadStore | #LoadLoad" : : : "memory") |
628 | #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ ("membar #LoadStore | #StoreStore") |
628 | #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ ("membar #LoadStore | #StoreStore") |
629 | #elif defined __s390__ || defined __s390x__ |
629 | #elif defined __s390__ || defined __s390x__ |
630 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("bcr 15,0" : : : "memory") |
630 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("bcr 15,0" : : : "memory") |
631 | #elif defined __mips__ |
631 | #elif defined __mips__ |
|
|
632 | /* GNU/Linux emulates sync on mips1 architectures, so we force it's use */ |
|
|
633 | /* anybody else who still uses mips1 is supposed to send in their version, with detection code. */ |
632 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("sync" : : : "memory") |
634 | #define ECB_MEMORY_FENCE __asm__ __volatile__ (".set mips2; sync; .set mips0" : : : "memory") |
633 | #elif defined __alpha__ |
635 | #elif defined __alpha__ |
634 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("mb" : : : "memory") |
636 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("mb" : : : "memory") |
635 | #elif defined __hppa__ |
637 | #elif defined __hppa__ |
636 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("" : : : "memory") |
638 | #define ECB_MEMORY_FENCE __asm__ __volatile__ ("" : : : "memory") |
637 | #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ ("") |
639 | #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ ("") |
… | |
… | |
2104 | ev_syserr ("(libev) error creating signal/async pipe"); |
2106 | ev_syserr ("(libev) error creating signal/async pipe"); |
2105 | |
2107 | |
2106 | fd_intern (fds [0]); |
2108 | fd_intern (fds [0]); |
2107 | } |
2109 | } |
2108 | |
2110 | |
2109 | fd_intern (fds [1]); |
|
|
2110 | |
|
|
2111 | evpipe [0] = fds [0]; |
2111 | evpipe [0] = fds [0]; |
2112 | |
2112 | |
2113 | if (evpipe [1] < 0) |
2113 | if (evpipe [1] < 0) |
2114 | evpipe [1] = fds [1]; /* first call, set write fd */ |
2114 | evpipe [1] = fds [1]; /* first call, set write fd */ |
2115 | else |
2115 | else |
… | |
… | |
2120 | /* so must not be executed on windows */ |
2120 | /* so must not be executed on windows */ |
2121 | |
2121 | |
2122 | dup2 (fds [1], evpipe [1]); |
2122 | dup2 (fds [1], evpipe [1]); |
2123 | close (fds [1]); |
2123 | close (fds [1]); |
2124 | } |
2124 | } |
|
|
2125 | |
|
|
2126 | fd_intern (evpipe [1]); |
2125 | |
2127 | |
2126 | ev_io_set (&pipe_w, evpipe [0] < 0 ? evpipe [1] : evpipe [0], EV_READ); |
2128 | ev_io_set (&pipe_w, evpipe [0] < 0 ? evpipe [1] : evpipe [0], EV_READ); |
2127 | ev_io_start (EV_A_ &pipe_w); |
2129 | ev_io_start (EV_A_ &pipe_w); |
2128 | ev_unref (EV_A); /* watcher should not keep loop alive */ |
2130 | ev_unref (EV_A); /* watcher should not keep loop alive */ |
2129 | } |
2131 | } |