LCOV - code coverage report
Current view: top level - src/gwrl - event_wake_pipe.c (source / functions) Hit Total Coverage
Test: all.info Lines: 35 44 79.5 %
Date: 2012-09-24 Functions: 4 4 100.0 %
Branches: 8 18 44.4 %

           Branch data     Line data    Source code
       1                 :            : 
       2                 :            : #include "gwrl/event.h"
       3                 :            : 
       4                 :        461 : void gwrl_wake(gwrl * rl) {
       5                 :        461 :         if(flisset(rl->flags,GWRL_SLEEPING)) {
       6                 :          2 :                 ssize_t res = 0;
       7                 :          2 :                 while(1) {
       8                 :          2 :                         res = write(rl->fds[1],"wake",4);
       9 [ -  + ][ #  # ]:          2 :                         if(res < 0 && errno == EINTR) continue;
      10                 :          2 :                         break;
      11                 :            :                 }
      12                 :          2 :         }
      13                 :        461 : }
      14                 :            : 
      15                 :         22 : void gwrl_wake_init(gwrl * rl) {
      16                 :         22 :         gwrlsrc * fsrc = NULL;
      17         [ -  + ]:         22 :         while((pipe((int *)rl->fds)) < 0) {
      18                 :          0 :                 gwprintsyserr("(3FG9D) pipe error",errno);
      19                 :          0 :         }
      20                 :         22 :         fcntl(rl->fds[0],F_SETFL,O_NONBLOCK);
      21                 :         22 :         fcntl(rl->fds[1],F_SETFL,O_NONBLOCK);
      22                 :         22 :         fsrc = gwrl_src_file_create((fileid_t)rl->fds[0],GWRL_RD,&gwrl_wake_activity,NULL);
      23         [ -  + ]:         22 :         if(!fsrc) {
      24                 :          0 :                 gwerr("(3FDli) gwrl_wake_init couldn't create file input source");
      25                 :          0 :                 return;
      26                 :            :         }
      27                 :         22 :         gwrl_src_add(rl,fsrc);
      28                 :         22 : }
      29                 :            : 
      30                 :          4 : void gwrl_wake_free(gwrl * rl) {
      31                 :          4 :         close((int)rl->fds[0]);
      32                 :          4 :         close((int)rl->fds[1]);
      33                 :          4 : }
      34                 :            : 
      35                 :          2 : void gwrl_wake_activity(gwrl * rl, gwrlevt * evt) {
      36                 :          2 :         int res = 0;
      37                 :          2 :         bool reinit = false;
      38                 :          2 :         if(flisset(evt->flags,GWRL_RD)) {
      39                 :          2 :                 char buf[4];
      40                 :          2 :                 while(1) {
      41                 :          4 :                         res = read(evt->fd,buf,4);
      42         [ +  + ]:          4 :                         if(res > 0) continue;
      43 [ +  - ][ -  + ]:          2 :                         if(res <= 0 && errno != EAGAIN && errno != EWOULDBLOCK) reinit = true;
                 [ #  # ]
      44                 :          2 :                         break;
      45                 :            :                 }
      46         [ -  + ]:          2 :                 if(reinit) {
      47                 :          0 :                         close(rl->fds[0]);
      48                 :          0 :                         close(rl->fds[1]);
      49                 :          0 :                         gwrl_src_del(rl,evt->src,NULL,true);
      50                 :          0 :                         gwrl_wake_init(rl);
      51                 :          0 :                 }
      52                 :          2 :         }
      53                 :          2 : }

Generated by: LCOV version 1.9