Lines Matching refs:g

139 static void timer_cb(GlobalInfo* g, int revents);
144 static int multi_timer_cb(CURLM *multi, long timeout_ms, GlobalInfo *g) in multi_timer_cb() argument
169 timerfd_settime(g->tfd, /* flags= */0, &its, NULL); in multi_timer_cb()
175 static void check_multi_info(GlobalInfo *g) in check_multi_info() argument
184 fprintf(MSG_OUT, "REMAINING: %d\n", g->still_running); in check_multi_info()
185 while((msg = curl_multi_info_read(g->multi, &msgs_left))) { in check_multi_info()
192 curl_multi_remove_handle(g->multi, easy); in check_multi_info()
201 static void event_cb(GlobalInfo *g, int fd, int revents) in event_cb() argument
209 rc = curl_multi_socket_action(g->multi, fd, action, &g->still_running); in event_cb()
212 check_multi_info(g); in event_cb()
213 if(g->still_running <= 0) { in event_cb()
216 timerfd_settime(g->tfd, 0, &its, NULL); in event_cb()
221 static void timer_cb(GlobalInfo* g, int revents) in timer_cb() argument
227 err = read(g->tfd, &count, sizeof(uint64_t)); in timer_cb()
235 fprintf(MSG_OUT, "EAGAIN on tfd %d\n", g->tfd); in timer_cb()
244 rc = curl_multi_socket_action(g->multi, in timer_cb()
245 CURL_SOCKET_TIMEOUT, 0, &g->still_running); in timer_cb()
247 check_multi_info(g); in timer_cb()
253 static void remsock(SockInfo *f, GlobalInfo* g) in remsock() argument
257 if(epoll_ctl(g->epfd, EPOLL_CTL_DEL, f->sockfd, NULL)) in remsock()
269 GlobalInfo *g) in setsock() argument
276 if(epoll_ctl(g->epfd, EPOLL_CTL_DEL, f->sockfd, NULL)) in setsock()
287 if(epoll_ctl(g->epfd, EPOLL_CTL_ADD, s, &ev)) in setsock()
295 static void addsock(curl_socket_t s, CURL *easy, int action, GlobalInfo *g) in addsock() argument
299 fdp->global = g; in addsock()
300 setsock(fdp, s, easy, action, g); in addsock()
301 curl_multi_assign(g->multi, s, fdp); in addsock()
307 GlobalInfo *g = (GlobalInfo*) cbp; in sock_cb() local
315 remsock(fdp, g); in sock_cb()
320 addsock(s, e, what, g); in sock_cb()
326 setsock(fdp, s, e, what, g); in sock_cb()
357 static void new_conn(char *url, GlobalInfo *g) in new_conn() argument
370 conn->global = g; in new_conn()
385 "Adding easy %p to multi %p (%s)\n", conn->easy, g->multi, url); in new_conn()
386 rc = curl_multi_add_handle(g->multi, conn->easy); in new_conn()
394 static void fifo_cb(GlobalInfo* g, int revents) in fifo_cb() argument
402 rv = fscanf(g->input, "%1023s%n", s, &n); in fifo_cb()
405 new_conn(s, g); /* if we read a URL, go get it! */ in fifo_cb()
414 static int init_fifo(GlobalInfo *g) in init_fifo() argument
439 g->fifofd = sockfd; in init_fifo()
440 g->input = fdopen(sockfd, "r"); in init_fifo()
444 epoll_ctl(g->epfd, EPOLL_CTL_ADD, sockfd, &epev); in init_fifo()
450 static void clean_fifo(GlobalInfo *g) in clean_fifo() argument
452 epoll_ctl(g->epfd, EPOLL_CTL_DEL, g->fifofd, NULL); in clean_fifo()
453 fclose(g->input); in clean_fifo()
467 GlobalInfo g; in main() local
477 memset(&g, 0, sizeof(GlobalInfo)); in main()
478 g.epfd = epoll_create1(EPOLL_CLOEXEC); in main()
479 if(g.epfd == -1) { in main()
484 g.tfd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC); in main()
485 if(g.tfd == -1) { in main()
493 timerfd_settime(g.tfd, 0, &its, NULL); in main()
496 ev.data.fd = g.tfd; in main()
497 epoll_ctl(g.epfd, EPOLL_CTL_ADD, g.tfd, &ev); in main()
499 init_fifo(&g); in main()
500 g.multi = curl_multi_init(); in main()
503 curl_multi_setopt(g.multi, CURLMOPT_SOCKETFUNCTION, sock_cb); in main()
504 curl_multi_setopt(g.multi, CURLMOPT_SOCKETDATA, &g); in main()
505 curl_multi_setopt(g.multi, CURLMOPT_TIMERFUNCTION, multi_timer_cb); in main()
506 curl_multi_setopt(g.multi, CURLMOPT_TIMERDATA, &g); in main()
515 int err = epoll_wait(g.epfd, events, in main()
529 if(events[idx].data.fd == g.fifofd) { in main()
530 fifo_cb(&g, events[idx].events); in main()
532 else if(events[idx].data.fd == g.tfd) { in main()
533 timer_cb(&g, events[idx].events); in main()
536 event_cb(&g, events[idx].data.fd, events[idx].events); in main()
544 curl_multi_cleanup(g.multi); in main()
545 clean_fifo(&g); in main()