]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
tvhpoll: big cleanups, add tvhpoll_add1 and tvhpoll_rem1 functions
authorJaroslav Kysela <perex@perex.cz>
Tue, 5 Dec 2017 14:39:37 +0000 (15:39 +0100)
committerJaroslav Kysela <perex@perex.cz>
Tue, 5 Dec 2017 14:39:37 +0000 (15:39 +0100)
src/dbus.c
src/descrambler/capmt.c
src/httpc.c
src/input/mpegts/iptv/iptv.c
src/input/mpegts/linuxdvb/linuxdvb_ddci.c
src/input/mpegts/satip/satip_frontend.c
src/input/mpegts/tsfile/tsfile_input.c
src/tcp.c
src/tvhpoll.c
src/tvhpoll.h

index 7909ffb8148bbe6a01ca6341edef3677183a9b48..30223e3a81f90460ad80008375239e7ad61fca93 100644 (file)
@@ -366,22 +366,15 @@ dbus_server_thread(void *aux)
   }
 
   poll = tvhpoll_create(2);
-  memset(&ev, 0, sizeof(ev));
-  ev.fd       = dbus_pipe.rd;
-  ev.events   = TVHPOLL_IN;
-  ev.data.ptr = &dbus_pipe;
-  tvhpoll_add(poll, &ev, 1);
-  memset(&ev, 0, sizeof(ev));
-  if (!dbus_connection_get_unix_fd(conn, &ev.fd)) {
+  tvhpoll_add1(poll, dbus_pipe.rd, TVHPOLL_IN, &dbus_pipe);
+  if (!dbus_connection_get_unix_fd(conn, &n)) {
     atomic_set(&dbus_running, 0);
     tvhpoll_destroy(poll);
     dbus_connection_safe_close(notify);
     dbus_connection_safe_close(conn);
     return NULL;
   }
-  ev.events   = TVHPOLL_IN;
-  ev.data.ptr = conn;
-  tvhpoll_add(poll, &ev, 1);
+  tvhpoll_add1(poll, n, TVHPOLL_IN, conn);
 
   while (atomic_get(&dbus_running)) {
 
index a66ac02632643b68687159c343a283def5a13980..6ba631400bd0d1653b86d360862c7f52fc6062ce 100644 (file)
@@ -241,9 +241,11 @@ typedef struct capmt_opaque {
 
 typedef struct capmt_adapter {
   ca_info_t       ca_info[MAX_INDEX];
+  int             ca_number;
   int             ca_sock;
   mpegts_input_t *ca_tuner;
   capmt_opaque_t  ca_pids[MAX_PIDS];
+  sbuf_t          ca_rbuf;
 } capmt_adapter_t;
 
 /**
@@ -331,30 +333,20 @@ capmt_include_elementary_stream(streaming_component_type_t type)
   return SCT_ISAV(type) || type == SCT_DVBSUB || type == SCT_TELETEXT;
 }
 
-static void
-capmt_poll_add(capmt_t *capmt, int fd, uint32_t u32)
+static int
+capmt_poll_add(capmt_t *capmt, int fd, void *ptr)
 {
-  tvhpoll_event_t ev;
-
   if (capmt->capmt_poll == NULL)
-    return;
-  memset(&ev, 0, sizeof(ev));
-  ev.events   = TVHPOLL_IN;
-  ev.fd       = fd;
-  ev.data.u32 = u32;
-  tvhpoll_add(capmt->capmt_poll, &ev, 1);
+    return 0;
+  return tvhpoll_add1(capmt->capmt_poll, fd, TVHPOLL_IN, ptr);
 }
 
-static void
+static int
 capmt_poll_rem(capmt_t *capmt, int fd)
 {
-  tvhpoll_event_t ev;
-
   if (capmt->capmt_poll == NULL)
-    return;
-  memset(&ev, 0, sizeof(ev));
-  ev.fd       = fd;
-  tvhpoll_rem(capmt->capmt_poll, &ev, 1);
+    return 0;
+  return tvhpoll_rem1(capmt->capmt_poll, fd);
 }
 
 static void
@@ -542,7 +534,7 @@ capmt_connect(capmt_t *capmt, int i)
     capmt->capmt_sock_reconnect[i]++;
     if (capmt_oscam_netproto(capmt))
       capmt_send_client_info(capmt);
-    capmt_poll_add(capmt, fd, i + 1);
+    capmt_poll_add(capmt, fd, &capmt->capmt_adapters[i]);
   }
 
   return fd;
@@ -1493,29 +1485,29 @@ show_connection(capmt_t *capmt, const char *what)
 
 #if CONFIG_LINUXDVB
 static void 
-handle_ca0(capmt_t *capmt) {
-  int i, ret, recvsock, adapter, nfds, cmd_size;
+handle_ca0(capmt_t *capmt)
+{
+  int i, ret, recvsock, nfds, cmd_size;
   uint32_t cmd;
   uint8_t buf[256];
-  sbuf_t buffer[MAX_CA];
   sbuf_t *pbuf;
+  capmt_adapter_t *adapter;
   tvhpoll_event_t ev[MAX_CA + 1];
 
   show_connection(capmt, "ca0");
 
-  for (i = 0; i < MAX_CA; i++)
-    sbuf_init(&buffer[i]);
-
   capmt_notify_server(capmt, NULL, 1);
 
   capmt->capmt_poll = tvhpoll_create(MAX_CA + 1);
-  capmt_poll_add(capmt, capmt->capmt_pipe.rd, 0);
-  for (i = 0; i < MAX_CA; i++)
-    if (capmt->capmt_adapters[i].ca_sock)
-      capmt_poll_add(capmt, capmt->capmt_adapters[i].ca_sock, i + 1);
+  capmt_poll_add(capmt, capmt->capmt_pipe.rd, &capmt->capmt_pipe);
+  for (i = 0; i < MAX_CA; i++) {
+    adapter = &capmt->capmt_adapters[i];
+    sbuf_init(&adapter->ca_rbuf);
+    if (adapter->ca_sock > 0)
+      capmt_poll_add(capmt, adapter->ca_sock, adapter);
+  }
 
   i = 0;
-  adapter = -1;
 
   while (atomic_get(&capmt->capmt_running)) {
 
@@ -1526,7 +1518,7 @@ handle_ca0(capmt_t *capmt) {
 
     for (i = 0; i < nfds; i++) {
 
-      if (ev[i].data.u32 == 0) {
+      if (ev[i].data.ptr == &capmt->capmt_pipe) {
         ret = read(capmt->capmt_pipe.rd, buf, 1);
         if (ret == 1 && buf[0] == 'c') {
           capmt_flush_queue(capmt, 0);
@@ -1538,12 +1530,11 @@ handle_ca0(capmt_t *capmt) {
         continue;
       }
 
-      adapter = ev[i].data.u32 - 1;
-
-      if (adapter < 0 || adapter >= MAX_CA)
+      adapter = ev[i].data.ptr;
+      if (adapter == NULL)
         continue;
 
-      recvsock = capmt->capmt_adapters[adapter].ca_sock;
+      recvsock = adapter->ca_sock;
 
       if (recvsock <= 0)
         continue;
@@ -1555,7 +1546,7 @@ handle_ca0(capmt_t *capmt) {
 
         close(recvsock);
         capmt_poll_rem(capmt, recvsock);
-        capmt->capmt_adapters[adapter].ca_sock = -1;
+        adapter->ca_sock = -1;
         continue;
       }
       
@@ -1565,7 +1556,7 @@ handle_ca0(capmt_t *capmt) {
       tvhtrace(LS_CAPMT, "%s: Received message from socket %i", capmt_name(capmt), recvsock);
       tvhlog_hexdump(LS_CAPMT, buf, ret);
 
-      pbuf = &buffer[adapter];
+      pbuf = &adapter->ca_rbuf;
       sbuf_append(pbuf, buf, ret);
 
       while (pbuf->sb_ptr > 0) {
@@ -1577,7 +1568,7 @@ handle_ca0(capmt_t *capmt) {
         }
         if (cmd_size <= pbuf->sb_ptr) {
           cmd = sbuf_peek_u32(pbuf, 0);
-          capmt_analyze_cmd(capmt, cmd, adapter, pbuf, 4);
+          capmt_analyze_cmd(capmt, cmd, adapter->ca_number, pbuf, 4);
           sbuf_cut(pbuf, cmd_size);
         } else {
           break;
@@ -1587,8 +1578,10 @@ handle_ca0(capmt_t *capmt) {
     }
   }
 
-  for (i = 0; i < MAX_CA; i++)
-    sbuf_free(&buffer[i]);
+  for (i = 0; i < MAX_CA; i++) {
+    adapter = &capmt->capmt_adapters[i];
+    sbuf_free(&adapter->ca_rbuf);
+  }
   tvhpoll_destroy(capmt->capmt_poll);
   capmt->capmt_poll = NULL;
 }
@@ -1612,8 +1605,8 @@ handle_single(capmt_t *capmt)
   capmt_notify_server(capmt, NULL, 1);
 
   capmt->capmt_poll = tvhpoll_create(2);
-  capmt_poll_add(capmt, capmt->capmt_pipe.rd, 0);
-  capmt_poll_add(capmt, capmt->capmt_sock[0], 1);
+  capmt_poll_add(capmt, capmt->capmt_pipe.rd, &capmt->capmt_pipe);
+  capmt_poll_add(capmt, capmt->capmt_sock[0], capmt->capmt_sock);
 
   while (atomic_get(&capmt->capmt_running)) {
 
@@ -1622,7 +1615,7 @@ handle_single(capmt_t *capmt)
     if (nfds <= 0)
       continue;
 
-    if (ev.data.u32 == 0) {
+    if (ev.data.ptr == &capmt->capmt_pipe) {
       ret = read(capmt->capmt_pipe.rd, buf, 1);
       if (ret == 1 && buf[0] == 'c') {
         capmt_flush_queue(capmt, 0);
@@ -1808,6 +1801,7 @@ capmt_thread(void *aux)
     fatal = 0;
     for (i = 0; i < MAX_CA; i++) {
       ca = &capmt->capmt_adapters[i];
+      ca->ca_number = i;
       ca->ca_sock = -1;
       memset(&ca->ca_info, 0, sizeof(ca->ca_info));
       for (j = 0; j < MAX_PIDS; j++) {
index b776e015831e04b7da82ad95cd9250dbb8e27a9e..c6651040989825fee16f1db010bc1b85d43b1488 100644 (file)
@@ -158,10 +158,7 @@ http_client_shutdown ( http_client_t *hc, int force, int reconnect )
       return;
   }
   if (hc->hc_efd) {
-    tvhpoll_event_t ev;
-    memset(&ev, 0, sizeof(ev));
-    ev.fd       = hc->hc_fd;
-    tvhpoll_rem(hc->hc_efd, &ev, 1);
+    tvhpoll_rem1(hc->hc_efd, hc->hc_fd);
     if (hc->hc_efd == http_poll && !reconnect) {
       pthread_mutex_lock(&http_lock);
       TAILQ_REMOVE(&http_clients, hc, hc_link);
@@ -192,23 +189,15 @@ static void
 http_client_poll_dir ( http_client_t *hc, int in, int out )
 {
   int events = (in ? TVHPOLL_IN : 0) | (out ? TVHPOLL_OUT : 0);
-  tvhpoll_event_t ev;
   if (hc->hc_efd) {
     if (events == 0 && hc->hc_pause) {
       tvhtrace(LS_HTTPC, "%04X: pausing input", shortid(hc));
       if (hc->hc_pevents_pause == 0)
         hc->hc_pevents_pause = hc->hc_pevents;
-      memset(&ev, 0, sizeof(ev));
-      ev.fd       = hc->hc_fd;
-      ev.data.ptr = hc;
-      tvhpoll_rem(hc->hc_efd, &ev, 1);
+      tvhpoll_rem1(hc->hc_efd, hc->hc_fd);
     } else if (hc->hc_pevents != events) {
       tvhtrace(LS_HTTPC, "%04X: add poll for input%s (%x)", shortid(hc), out ? " and output" : "", events);
-      memset(&ev, 0, sizeof(ev));
-      ev.fd       = hc->hc_fd;
-      ev.events   = events | TVHPOLL_IN;
-      ev.data.ptr = hc;
-      tvhpoll_add(hc->hc_efd, &ev, 1);
+      tvhpoll_add1(hc->hc_efd, hc->hc_fd, events | TVHPOLL_IN, hc);
     }
   }
   hc->hc_pevents = events;
@@ -1614,7 +1603,6 @@ void
 http_client_close ( http_client_t *hc )
 {
   http_client_wcmd_t *wcmd;
-  tvhpoll_event_t ev;
 
   if (hc == NULL)
     return;
@@ -1625,9 +1613,7 @@ http_client_close ( http_client_t *hc )
     while (hc->hc_running)
       tvh_cond_wait(&http_cond, &http_lock);
     if (hc->hc_efd) {
-      memset(&ev, 0, sizeof(ev));
-      ev.fd = hc->hc_fd;
-      tvhpoll_rem(hc->hc_efd, &ev, 1);
+      tvhpoll_rem1(hc->hc_efd, hc->hc_fd);
       TAILQ_REMOVE(&http_clients, hc, hc_link);
       hc->hc_efd = NULL;
     }
@@ -1674,8 +1660,6 @@ pthread_t http_client_tid;
 void
 http_client_init ( const char *user_agent )
 {
-  tvhpoll_event_t ev;
-
   http_user_agent = user_agent ? strdup(user_agent) : NULL;
 
   /* Setup list */
@@ -1688,11 +1672,7 @@ http_client_init ( const char *user_agent )
 
   /* Setup poll */
   http_poll   = tvhpoll_create(10);
-  memset(&ev, 0, sizeof(ev));
-  ev.fd       = http_pipe.rd;
-  ev.events   = TVHPOLL_IN;
-  ev.data.ptr = &http_pipe;
-  tvhpoll_add(http_poll, &ev, 1);
+  tvhpoll_add1(http_poll, http_pipe.rd, TVHPOLL_IN, &http_pipe);
 
   /* Setup thread */
   atomic_set(&http_running, 1);
index 944a264cc50b80eccfef41f1c86a2ec9d2ced999..bf8b4d62fb5bcd07a782a9513194e5374d47877f 100644 (file)
@@ -491,15 +491,10 @@ iptv_input_thread ( void *aux )
 void
 iptv_input_pause_handler ( iptv_mux_t *im, int pause )
 {
-  tvhpoll_event_t ev = { 0 };
-
-  ev.fd       = im->mm_iptv_fd;
-  ev.events   = TVHPOLL_IN;
-  ev.data.ptr = im;
   if (pause)
-    tvhpoll_rem(iptv_poll, &ev, 1);
+    tvhpoll_rem1(iptv_poll, im->mm_iptv_fd);
   else
-    tvhpoll_add(iptv_poll, &ev, 1);
+    tvhpoll_add1(iptv_poll, im->mm_iptv_fd, TVHPOLL_IN, im);
 }
 
 void
@@ -584,16 +579,11 @@ int
 iptv_input_fd_started ( iptv_mux_t *im )
 {
   char buf[256];
-  tvhpoll_event_t ev = { 0 };
 
   /* Setup poll */
   if (im->mm_iptv_fd > 0) {
-    ev.fd       = im->mm_iptv_fd;
-    ev.events   = TVHPOLL_IN;
-    ev.data.ptr = im;
-
     /* Error? */
-    if (tvhpoll_add(iptv_poll, &ev, 1) == -1) {
+    if (tvhpoll_add1(iptv_poll, im->mm_iptv_fd, TVHPOLL_IN, im) < 0) {
       mpegts_mux_nice_name((mpegts_mux_t*)im, buf, sizeof(buf));
       tvherror(LS_IPTV, "%s - failed to add to poll q", buf);
       close(im->mm_iptv_fd);
@@ -604,12 +594,8 @@ iptv_input_fd_started ( iptv_mux_t *im )
 
   /* Setup poll2 */
   if (im->mm_iptv_fd2 > 0) {
-    ev.fd       = im->mm_iptv_fd2;
-    ev.events   = TVHPOLL_IN;
-    ev.data.ptr = im;
-
     /* Error? */
-    if (tvhpoll_add(iptv_poll, &ev, 1) == -1) {
+    if (tvhpoll_add1(iptv_poll, im->mm_iptv_fd2, TVHPOLL_IN, im) < 0) {
       mpegts_mux_nice_name((mpegts_mux_t*)im, buf, sizeof(buf));
       tvherror(LS_IPTV, "%s - failed to add to poll q (2)", buf);
       close(im->mm_iptv_fd2);
index fd930c361ef26586bd5161fc09bcc7319f45e610..4d5b890ea4fe023882ddee00e8d4f099d085cd1e 100644 (file)
@@ -604,10 +604,7 @@ linuxdvb_ddci_read_thread ( void *arg )
 
   /* Setup poll */
   efd = tvhpoll_create(1);
-  memset(ev, 0, sizeof(ev));
-  ev[0].events             = TVHPOLL_IN;
-  ev[0].fd = ev[0].data.fd = fd;
-  tvhpoll_add(efd, ev, 1);
+  tvhpoll_add1(efd, fd, TVHPOLL_IN, NULL);
 
   /* Allocate memory */
   sbuf_init_fixed(&sb, MINMAX(ddci_rd_thread->lddci_cfg_recv_buffer_sz,
index a842670d2fe88b592056d68977a147526645992c..f4bbb62155bfc557c125ccb82b2e9744a352a9dd 100644 (file)
@@ -1300,11 +1300,7 @@ satip_frontend_extra_shutdown
 
   rtsp->hc_rtsp_session = strdup((char *)session);
 
-  memset(&ev, 0, sizeof(ev));
-  ev.events           = TVHPOLL_IN;
-  ev.fd               = rtsp->hc_fd;
-  ev.data.ptr         = rtsp;
-  tvhpoll_add(efd, &ev, 1);
+  tvhpoll_add1(efd, rtsp->hc_fd, TVHPOLL_IN, rtsp);
   rtsp->hc_efd = efd;
 
   snprintf(b, sizeof(b), "/stream=%li", stream_id);
@@ -1402,22 +1398,9 @@ satip_frontend_close_rtsp
   ( satip_frontend_t *lfe, const char *name, tvhpoll_t *efd,
     http_client_t *rtsp, satip_tune_req_t *tr )
 {
-  tvhpoll_event_t ev;
-
-  memset(&ev, 0, sizeof(ev));
-  ev.events   = TVHPOLL_IN;
-  ev.fd       = lfe->sf_dvr_pipe.rd;
-  ev.data.ptr = NULL;
-  tvhpoll_rem(efd, &ev, 1);
-
+  tvhpoll_rem1(efd, lfe->sf_dvr_pipe.rd);
   satip_frontend_shutdown(lfe, name, rtsp, tr, efd);
-
-  memset(&ev, 0, sizeof(ev));
-  ev.events   = TVHPOLL_IN;
-  ev.fd       = lfe->sf_dvr_pipe.rd;
-  ev.data.ptr = NULL;
-  tvhpoll_add(efd, &ev, 1);
-
+  tvhpoll_add1(efd, lfe->sf_dvr_pipe.rd, TVHPOLL_IN, NULL);
   http_client_close(rtsp);
 }
 
@@ -1598,11 +1581,7 @@ new_tune:
   if (rtsp)
     rtsp->hc_rtp_data_received = NULL;
 
-  memset(ev, 0, sizeof(ev));
-  ev[0].events             = TVHPOLL_IN;
-  ev[0].fd                 = lfe->sf_dvr_pipe.rd;
-  ev[0].data.ptr           = NULL;
-  tvhpoll_add(efd, ev, 1);
+  tvhpoll_add1(efd, lfe->sf_dvr_pipe.rd, TVHPOLL_IN, NULL);
 
   lfe->mi_display_name((mpegts_input_t*)lfe, buf, sizeof(buf));
   lfe->sf_display_name = buf;
@@ -2064,21 +2043,13 @@ new_tune:
   udp_multirecv_free(&um);
   lfe->sf_curmux = NULL;
 
+  memset(ev, 0, sizeof(&ev));
   nfds = 0;
   if ((rtsp_flags & SATIP_SETUP_TCP) == 0) {
-    ev[nfds].events             = TVHPOLL_IN;
-    ev[nfds].fd                 = rtp->fd;
-    ev[nfds].data.ptr           = rtp;
-    nfds++;
-    ev[nfds].events             = TVHPOLL_IN;
-    ev[nfds].fd                 = rtcp->fd;
-    ev[nfds].data.ptr           = rtcp;
-    nfds++;
+    ev[nfds++].fd = rtp->fd;
+    ev[nfds++].fd = rtcp->fd;
   }
-  ev[nfds].events             = TVHPOLL_IN;
-  ev[nfds].fd                 = lfe->sf_dvr_pipe.rd;
-  ev[nfds].data.ptr           = NULL;
-  nfds++;
+  ev[nfds++].fd = lfe->sf_dvr_pipe.rd;
   tvhpoll_rem(efd, ev, nfds);
 
   if (exit_flag) {
index edb95d90f9700fbddb5dd5efdb0a97c6b3391e73..d1b3f03d385d9221220cfe7372238081d7367ed2 100644 (file)
@@ -67,11 +67,8 @@ tsfile_input_thread ( void *aux )
   if (fd == -1) return NULL;
   
   /* Polling */
-  memset(&ev, 0, sizeof(ev));
   efd = tvhpoll_create(2);
-  ev.events          = TVHPOLL_IN;
-  ev.fd = ev.data.fd = mi->ti_thread_pipe.rd;
-  tvhpoll_add(efd, &ev, 1);
+  tvhpoll_add1(efd, mi->ti_thread_pipe.rd, TVHPOLL_IN, NULL);
 
   /* Alloc memory */
   sbuf_init_fixed(&buf, 18800);
index 5bd214940edf464a9d15b51f27ef96f45037acdb..1e4e16f23ea5244f5546962782b2a8bb9570acae 100644 (file)
--- a/src/tcp.c
+++ b/src/tcp.c
@@ -199,11 +199,7 @@ again:
       tvhpoll_t *efd;
 
       efd = tvhpoll_create(1);
-      memset(&ev, 0, sizeof(ev));
-      ev.events   = TVHPOLL_OUT;
-      ev.fd       = fd;
-      ev.data.ptr = &fd;
-      tvhpoll_add(efd, &ev, 1);
+      tvhpoll_add1(efd, fd, TVHPOLL_OUT, &fd);
 
       /* minimal timeout is one second */
       if (timeout < 1)
@@ -976,17 +972,11 @@ tcp_server_create
 void tcp_server_register(void *server)
 {
   tcp_server_t *ts = server;
-  tvhpoll_event_t ev;
 
   if (ts == NULL)
     return;
 
-  memset(&ev, 0, sizeof(ev));
-
-  ev.fd       = ts->serverfd;
-  ev.events   = TVHPOLL_IN;
-  ev.data.ptr = ts;
-  tvhpoll_add(tcp_server_poll, &ev, 1);
+  tvhpoll_add1(tcp_server_poll, ts->serverfd, TVHPOLL_IN, ts);
 }
 
 /**
@@ -996,17 +986,12 @@ void
 tcp_server_delete(void *server)
 {
   tcp_server_t *ts = server;
-  tvhpoll_event_t ev;
   char c = 'D';
 
   if (server == NULL)
     return;
 
-  memset(&ev, 0, sizeof(ev));
-  ev.fd       = ts->serverfd;
-  ev.events   = TVHPOLL_IN;
-  ev.data.ptr = ts;
-  tvhpoll_rem(tcp_server_poll, &ev, 1);
+  tvhpoll_rem1(tcp_server_poll, ts->serverfd);
   close(ts->serverfd);
   ts->serverfd = -1;
   LIST_INSERT_HEAD(&tcp_server_delete_list, ts, link);
@@ -1170,15 +1155,10 @@ tcp_server_preinit(int opt_ipv6)
 void
 tcp_server_init(void)
 {
-  tvhpoll_event_t ev;
   tvh_pipe(O_NONBLOCK, &tcp_server_pipe);
   tcp_server_poll = tvhpoll_create(10);
 
-  memset(&ev, 0, sizeof(ev));
-  ev.fd       = tcp_server_pipe.rd;
-  ev.events   = TVHPOLL_IN;
-  ev.data.ptr = &tcp_server_pipe;
-  tvhpoll_add(tcp_server_poll, &ev, 1);
+  tvhpoll_add1(tcp_server_poll, tcp_server_pipe.rd, TVHPOLL_IN, &tcp_server_pipe);
 
   atomic_set(&tcp_server_running, 1);
   tvhthread_create(&tcp_server_tid, NULL, tcp_server_loop, NULL, "tcp-loop");
index 7d7116d67c974323a92317920f9a8df8b034d7f7..4b8f119f3afb0d63c32e27f9308b9980896fd960 100644 (file)
@@ -153,6 +153,16 @@ int tvhpoll_add
 #endif
 }
 
+int tvhpoll_add1
+  ( tvhpoll_t *tp, int fd, int events, void *ptr )
+{
+  tvhpoll_event_t ev = { 0 };
+  ev.fd = fd;
+  ev.events = events;
+  ev.data.ptr = ptr;
+  return tvhpoll_add(tp, &ev, 1);
+}
+
 int tvhpoll_rem
   ( tvhpoll_t *tp, tvhpoll_event_t *evs, size_t num )
 {
@@ -172,6 +182,14 @@ int tvhpoll_rem
   return 0;
 }
 
+int tvhpoll_rem1
+  ( tvhpoll_t *tp, int fd )
+{
+  tvhpoll_event_t ev = { 0 };
+  ev.fd = fd;
+  return tvhpoll_rem(tp, &ev, 1);
+}
+
 int tvhpoll_wait
   ( tvhpoll_t *tp, tvhpoll_event_t *evs, size_t num, int ms )
 {
index 892bee5bab773f84c2dd5cb0c942e70730e79c8c..9035f0c6860a4bf8a7b8e1843f7883a67e3ba6a0 100644 (file)
@@ -34,7 +34,7 @@ typedef struct tvhpoll_event
     uint64_t u64;
     uint32_t u32;
     int      fd;
-  }    data;
+  } data;
 } tvhpoll_event_t;
 
 #define TVHPOLL_IN  0x01
@@ -43,13 +43,12 @@ typedef struct tvhpoll_event
 #define TVHPOLL_ERR 0x08
 #define TVHPOLL_HUP 0x10
 
-tvhpoll_t *tvhpoll_create  ( size_t num );
-void       tvhpoll_destroy ( tvhpoll_t *tp );
-int        tvhpoll_add
-  ( tvhpoll_t *tp, tvhpoll_event_t *evs, size_t num );
-int        tvhpoll_rem
-  ( tvhpoll_t *tp, tvhpoll_event_t *evs, size_t num );
-int        tvhpoll_wait
-  ( tvhpoll_t *tp, tvhpoll_event_t *evs, size_t num, int ms );
+tvhpoll_t *tvhpoll_create(size_t num);
+void tvhpoll_destroy(tvhpoll_t *tp);
+int tvhpoll_add(tvhpoll_t *tp, tvhpoll_event_t *evs, size_t num);
+int tvhpoll_add1(tvhpoll_t *tp, int fd, int events, void *ptr);
+int tvhpoll_rem(tvhpoll_t *tp, tvhpoll_event_t *evs, size_t num);
+int tvhpoll_rem1(tvhpoll_t *tp, int fd);
+int tvhpoll_wait(tvhpoll_t *tp, tvhpoll_event_t *evs, size_t num, int ms);
 
 #endif /* __TVHPOLL_H__ */