src/server/daemon/event_solaris.c

changeset 35
4417619a9bbd
parent 30
27c7511c0e34
child 43
8ac56edb4e94
equal deleted inserted replaced
34:2b4574e617c0 35:4417619a9bbd
67 return NULL; 67 return NULL;
68 } 68 }
69 conf->handler = ev; 69 conf->handler = ev;
70 conf->port = ev->ports[i]; 70 conf->port = ev->ports[i];
71 71
72 systhread_start(0, 0, (thrstartfunc)ev_handle_events, ev); 72 ev_thr_conf_t *thrconf = malloc(sizeof(ev_thr_conf_t));
73 thrconf->handler = ev;
74 thrconf->port = ev->ports[i];
75 systhread_start(0, 0, (thrstartfunc)ev_handle_events, thrconf);
73 /* TODO: error handling */ 76 /* TODO: error handling */
74 } 77 }
75 78
76 return ev; 79 return ev;
77 } 80 }
91 /* wait for events */ 94 /* wait for events */
92 uint_t nev = 1; 95 uint_t nev = 1;
93 int ret = port_getn(port, events, 16, &nev, &timeout); 96 int ret = port_getn(port, events, 16, &nev, &timeout);
94 if(ret == -1) { 97 if(ret == -1) {
95 /* TODO: check for error */ 98 /* TODO: check for error */
99 perror("port_getn");
96 continue; 100 continue;
97 } 101 }
98 102
99 for(int i=0;i<nev;i++) { 103 for(int i=0;i<nev;i++) {
100 event_t *event = events[i].portev_user; 104 event_t *event = events[i].portev_user;
107 111
108 /* returns a event handler port */ 112 /* returns a event handler port */
109 int ev_get_port(event_handler_t *h) { 113 int ev_get_port(event_handler_t *h) {
110 int nps = h->nports; 114 int nps = h->nports;
111 if(nps == 1) { 115 if(nps == 1) {
112 return 0; 116 return h->ports[0];
113 } 117 }
114 118
115 int cp = h->lp % nps; 119 int cp = h->lp % nps;
116 atomic_inc_32(&h->lp); 120 atomic_inc_32(&h->lp);
117 121

mercurial