]> git.meshlink.io Git - catta/commitdiff
add some debug output to simple-watch poll implementation
authorSven M. Hallberg <pesco@khjk.org>
Thu, 16 Oct 2014 15:29:03 +0000 (17:29 +0200)
committerSven M. Hallberg <pesco@khjk.org>
Thu, 16 Oct 2014 15:29:03 +0000 (17:29 +0200)
src/simple-watch.c

index e0b1467d91b66c9c25116a18e2482f00ae90370d..2992d87108075144468a4110f469b90770515129 100644 (file)
@@ -112,9 +112,15 @@ static void clear_wakeup(CattaSimplePoll *s) {
 
     s->wakeup_issued = 0;
 
-    for(;;)
+    printf("(clear wake-up"); fflush(stdout); // XXX
+    for(;;) {
+        int n;
+        ioctl(s->wakeup_pipe[0], FIONREAD, &n);
+        printf(" %d", n); fflush(stdout); // XXX
         if (readpipe(s->wakeup_pipe[0], c, sizeof(c)) != sizeof(c))
             break;
+    }
+    printf(")\n"); // XXX
 }
 
 static CattaWatch* watch_new(const CattaPoll *api, int fd, CattaWatchEvent event, CattaWatchCallback callback, void *userdata) {
@@ -515,12 +521,20 @@ int catta_simple_poll_run(CattaSimplePoll *s) {
     for (;;) {
         errno = 0;
 
+        // XXX debug
+        {
+            printf("(poll %d...", s->n_pollfds);
+            fflush(stdout);
+        }
         if (s->poll_func(s->pollfds, s->n_pollfds, s->prepared_timeout, s->poll_func_userdata) < 0) {
 
-            if (errno == EINTR)
+            if (errno == EINTR) {
+                printf(" interrupted)\n"); // XXX
                 continue;
+            }
 
             s->state = STATE_FAILURE;
+            printf(" FAIL)\n"); // XXX
             return -1;
         }
 
@@ -543,7 +557,20 @@ int catta_simple_poll_dispatch(CattaSimplePoll *s) {
     assert(s->state == STATE_RAN);
     s->state = STATE_DISPATCHING;
 
-    /* We execute only on callback in every iteration */
+    // XXX debug
+    {
+        int i, nready=0, nwatches=0;
+        for(w=s->watches; w; w=w->watches_next)
+            nwatches++;
+        for(i=0; i<s->n_pollfds; i++)
+            if(s->pollfds[i].revents)
+                nready++;
+        if(nready > 0 && s->pollfds[i].revents)
+            printf(" wake-up,");
+        printf(" %d ready, %d watches)\n", nready, nwatches);
+    }
+
+    /* We execute only one callback in every iteration */
 
     /* Check whether the wakeup time has been reached now */
     if ((next_timeout = find_next_timeout(s))) {