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

Comparing libev/ev.c (file contents):
Revision 1.426 by root, Sun May 6 13:42:10 2012 UTC vs.
Revision 1.431 by root, Wed May 9 16:51:33 2012 UTC

201# include <sys/wait.h> 201# include <sys/wait.h>
202# include <unistd.h> 202# include <unistd.h>
203#else 203#else
204# include <io.h> 204# include <io.h>
205# define WIN32_LEAN_AND_MEAN 205# define WIN32_LEAN_AND_MEAN
206# include <winsock2.h>
206# include <windows.h> 207# include <windows.h>
207# ifndef EV_SELECT_IS_WINSOCKET 208# ifndef EV_SELECT_IS_WINSOCKET
208# define EV_SELECT_IS_WINSOCKET 1 209# define EV_SELECT_IS_WINSOCKET 1
209# endif 210# endif
210# undef EV_AVOID_STDIO 211# undef EV_AVOID_STDIO
408/* some very old inotify.h headers don't have IN_DONT_FOLLOW */ 409/* some very old inotify.h headers don't have IN_DONT_FOLLOW */
409# ifndef IN_DONT_FOLLOW 410# ifndef IN_DONT_FOLLOW
410# undef EV_USE_INOTIFY 411# undef EV_USE_INOTIFY
411# define EV_USE_INOTIFY 0 412# define EV_USE_INOTIFY 0
412# endif 413# endif
413#endif
414
415#if EV_SELECT_IS_WINSOCKET
416# include <winsock.h>
417#endif 414#endif
418 415
419#if EV_USE_EVENTFD 416#if EV_USE_EVENTFD
420/* our minimum requirement is glibc 2.7 which has the stub, but not the header */ 417/* our minimum requirement is glibc 2.7 which has the stub, but not the header */
421# include <stdint.h> 418# include <stdint.h>
1876 write (evfd, &counter, sizeof (uint64_t)); 1873 write (evfd, &counter, sizeof (uint64_t));
1877 } 1874 }
1878 else 1875 else
1879#endif 1876#endif
1880 { 1877 {
1881 /* win32 people keep sending patches that change this write() to send() */ 1878#ifdef _WIN32
1882 /* and then run away. but send() is wrong, it wants a socket handle on win32 */ 1879 WSABUF buf;
1883 /* so when you think this write should be a send instead, please find out */ 1880 DWORD sent;
1884 /* where your send() is from - it's definitely not the microsoft send, and */ 1881 buf.buf = &buf;
1885 /* tell me. thank you. */ 1882 buf.len = 1;
1886 /* it might be that your problem is that your environment needs EV_USE_WSASOCKET */ 1883 WSASend (EV_FD_TO_WIN32_HANDLE (evpipe [1]), &buf, 1, &sent, 0, 0, 0);
1887 /* check the ev documentation on how to use this flag */ 1884#else
1888 write (evpipe [1], &(evpipe [1]), 1); 1885 write (evpipe [1], &(evpipe [1]), 1);
1886#endif
1889 } 1887 }
1890 1888
1891 errno = old_errno; 1889 errno = old_errno;
1892 } 1890 }
1893} 1891}
1908 read (evfd, &counter, sizeof (uint64_t)); 1906 read (evfd, &counter, sizeof (uint64_t));
1909 } 1907 }
1910 else 1908 else
1911#endif 1909#endif
1912 { 1910 {
1913 char dummy; 1911 char dummy[4];
1914 /* see discussion in evpipe_write when you think this read should be recv in win32 */ 1912#ifdef _WIN32
1913 WSABUF buf;
1914 DWORD recvd;
1915 buf.buf = dummy;
1916 buf.len = sizeof (dummy);
1917 WSARecv (EV_FD_TO_WIN32_HANDLE (evpipe [0]), &buf, 1, &recvd, 0, 0, 0);
1918#else
1915 read (evpipe [0], &dummy, 1); 1919 read (evpipe [0], &dummy, sizeof (dummy));
1920#endif
1916 } 1921 }
1917 } 1922 }
1918 1923
1919 pipe_write_skipped = 0; 1924 pipe_write_skipped = 0;
1920 1925
2554#if EV_FEATURE_API 2559#if EV_FEATURE_API
2555void ecb_cold 2560void ecb_cold
2556ev_verify (EV_P) EV_THROW 2561ev_verify (EV_P) EV_THROW
2557{ 2562{
2558#if EV_VERIFY 2563#if EV_VERIFY
2559 int i, j; 2564 int i;
2560 WL w, w2; 2565 WL w, w2;
2561 2566
2562 assert (activecnt >= -1); 2567 assert (activecnt >= -1);
2563 2568
2564 assert (fdchangemax >= fdchangecnt); 2569 assert (fdchangemax >= fdchangecnt);
2565 for (i = 0; i < fdchangecnt; ++i) 2570 for (i = 0; i < fdchangecnt; ++i)
2566 assert (("libev: negative fd in fdchanges", fdchanges [i] >= 0)); 2571 assert (("libev: negative fd in fdchanges", fdchanges [i] >= 0));
2567 2572
2568 assert (anfdmax >= 0); 2573 assert (anfdmax >= 0);
2569 for (i = j = 0; i < anfdmax; ++i) 2574 for (i = 0; i < anfdmax; ++i)
2575 {
2576 int j = 0;
2577
2570 for (w = w2 = anfds [i].head; w; w = w->next) 2578 for (w = w2 = anfds [i].head; w; w = w->next)
2571 { 2579 {
2572 verify_watcher (EV_A_ (W)w); 2580 verify_watcher (EV_A_ (W)w);
2573 2581
2574 if (++j & 1) 2582 if (j++ & 1)
2575 w2 = w2->next; 2583 {
2576
2577 assert (("libev: io watcher list contains a loop", w != w2)); 2584 assert (("libev: io watcher list contains a loop", w != w2));
2585 w2 = w2->next;
2586 }
2587
2578 assert (("libev: inactive fd watcher on anfd list", ev_active (w) == 1)); 2588 assert (("libev: inactive fd watcher on anfd list", ev_active (w) == 1));
2579 assert (("libev: fd mismatch between watcher and anfd", ((ev_io *)w)->fd == i)); 2589 assert (("libev: fd mismatch between watcher and anfd", ((ev_io *)w)->fd == i));
2580 } 2590 }
2591 }
2581 2592
2582 assert (timermax >= timercnt); 2593 assert (timermax >= timercnt);
2583 verify_heap (EV_A_ timers, timercnt); 2594 verify_heap (EV_A_ timers, timercnt);
2584 2595
2585#if EV_PERIODIC_ENABLE 2596#if EV_PERIODIC_ENABLE

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines