ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev_linuxaio.c
(Generate patch)

Comparing libev/ev_linuxaio.c (file contents):
Revision 1.31 by root, Tue Jun 25 18:00:42 2019 UTC vs.
Revision 1.33 by root, Tue Jun 25 22:41:23 2019 UTC

124 * our syscalls return < 0, not == -1, on error. which is good 124 * our syscalls return < 0, not == -1, on error. which is good
125 * enough for linux aio. 125 * enough for linux aio.
126 * TODO: arm is also common nowadays, maybe even mips and x86 126 * TODO: arm is also common nowadays, maybe even mips and x86
127 * TODO: after implementing this, it suddenly looks like overkill, but its hard to remove... 127 * TODO: after implementing this, it suddenly looks like overkill, but its hard to remove...
128 */ 128 */
129#if __GNUC__ && __linux && ECB_AMD64 129#if __GNUC__ && __linux && ECB_AMD64 && !defined __OPTIMIZE_SIZE__
130 /* the costly errno access probably kills this for size optimisation */
130 131
131 #define ev_syscall(nr,narg,arg1,arg2,arg3,arg4,arg5) \ 132 #define ev_syscall(nr,narg,arg1,arg2,arg3,arg4,arg5) \
132 ({ \ 133 ({ \
133 long res; \ 134 long res; \
134 register unsigned long r5 __asm__ ("r8" ); \ 135 register unsigned long r5 __asm__ ("r8" ); \
569void 570void
570linuxaio_destroy (EV_P) 571linuxaio_destroy (EV_P)
571{ 572{
572 epoll_destroy (EV_A); 573 epoll_destroy (EV_A);
573 linuxaio_free_iocbp (EV_A); 574 linuxaio_free_iocbp (EV_A);
574 evsys_io_destroy (linuxaio_ctx); 575 evsys_io_destroy (linuxaio_ctx); /* fails in child, aio context is destroyed */
575} 576}
576 577
577inline_size 578inline_size
578void 579void
579linuxaio_fork (EV_P) 580linuxaio_fork (EV_P)
585 linuxaio_iteration = 0; /* we start over in the child */ 586 linuxaio_iteration = 0; /* we start over in the child */
586 587
587 while (linuxaio_io_setup (EV_A) < 0) 588 while (linuxaio_io_setup (EV_A) < 0)
588 ev_syserr ("(libev) linuxaio io_setup"); 589 ev_syserr ("(libev) linuxaio io_setup");
589 590
591 /* forking epoll should also effectively unregister all fds from the backend */
590 epoll_fork (EV_A); 592 epoll_fork (EV_A);
591 593
592 ev_io_stop (EV_A_ &linuxaio_epoll_w); 594 ev_io_stop (EV_A_ &linuxaio_epoll_w);
593 ev_io_set (EV_A_ &linuxaio_epoll_w, backend_fd, EV_READ); 595 ev_io_set (EV_A_ &linuxaio_epoll_w, backend_fd, EV_READ);
594 ev_io_start (EV_A_ &linuxaio_epoll_w); 596 ev_io_start (EV_A_ &linuxaio_epoll_w);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines