Remove maskfun/socketfun
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 27 Apr 2010 08:46:22 +0000 (10:46 +0200)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 27 Apr 2010 08:46:22 +0000 (10:46 +0200)
src/connection.c
src/eventl.c
src/eventl.h

index 8170590..da7c1a5 100644 (file)
@@ -255,6 +255,8 @@ void connection_continue(struct connection *co)
     int r = ZOOM_connection_exec_task(co->link);
     if (!r)
         yaz_log(YLOG_WARN, "No task was executed for connection");
+    iochan_setflags(co->iochan, ZOOM_connection_get_mask(co->link));
+    iochan_setfd(co->iochan, ZOOM_connection_get_socket(co->link));
 }
 
 static void connection_handler(IOCHAN iochan, int event)
@@ -305,6 +307,12 @@ static void connection_handler(IOCHAN iochan, int event)
         
         non_block_events(co);
         client_unlock(cl);
+
+        if (co->link)
+        {
+            iochan_setflags(iochan, ZOOM_connection_get_mask(co->link));
+            iochan_setfd(iochan, ZOOM_connection_get_socket(co->link));
+        }
     }
 }
 
@@ -367,28 +375,6 @@ static struct host *connection_get_host(struct connection *con)
     return con->host;
 }
 
-// Callback for use by event loop
-// We do this because ZOOM connections don't always have (the same) sockets
-static int socketfun(IOCHAN c)
-{
-    struct connection *co = iochan_getdata(c);
-    if (!co->link)
-        return -1;
-    return ZOOM_connection_get_socket(co->link);
-}
-
-// Because ZOOM always knows what events it is interested in; we may not
-static int maskfun(IOCHAN c)
-{
-    struct connection *co = iochan_getdata(c);
-    if (!co->link)
-        return 0;
-
-    // This is cheating a little, and assuming that eventl mask IDs are always
-    // the same as ZOOM-C's.
-    return ZOOM_connection_get_mask(co->link);
-}
-
 static int connection_connect(struct connection *con, iochan_man_t iochan_man)
 {
     ZOOM_connection link = 0;
@@ -451,8 +437,6 @@ static int connection_connect(struct connection *con, iochan_man_t iochan_man)
     con->state = Conn_Connecting;
     iochan_settimeout(con->iochan, con->operation_timeout);
     iochan_setdata(con->iochan, con);
-    iochan_setsocketfun(con->iochan, socketfun);
-    iochan_setmaskfun(con->iochan, maskfun);
     iochan_add(iochan_man, con->iochan);
 
     /* this fragment is bad DRY: from client_prep_connection */
index 4992391..f9f0dc2 100644 (file)
@@ -115,8 +115,6 @@ IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags,
     new_iochan->fd = fd;
     new_iochan->flags = flags;
     new_iochan->fun = cb;
-    new_iochan->socketfun = NULL;
-    new_iochan->maskfun = NULL;
     new_iochan->last_event = new_iochan->max_idle = 0;
     new_iochan->next = NULL;
     new_iochan->man = 0;
@@ -182,10 +180,6 @@ static int event_loop(iochan_man_t man, IOCHAN *iochans)
        {
             if (p->thread_users > 0)
                 continue;
-            if (p->maskfun)
-                p->flags = (*p->maskfun)(p);
-            if (p->socketfun)
-                p->fd = (*p->socketfun)(p);
             if (p->max_idle && p->max_idle < to.tv_sec)
                 to.tv_sec = p->max_idle;
             if (p->fd < 0)
index e22b90e..785ba9d 100644 (file)
@@ -25,8 +25,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 struct iochan;
 
 typedef void (*IOC_CALLBACK)(struct iochan *i, int event);
-typedef int (*IOC_SOCKETFUN)(struct iochan *i);
-typedef int (*IOC_MASKFUN)(struct iochan *i);
 
 typedef struct iochan_man_s *iochan_man_t;
 
@@ -39,8 +37,6 @@ typedef struct iochan
 #define EVENT_EXCEPT    0x04
 #define EVENT_TIMEOUT   0x08
     IOC_CALLBACK fun;
-    IOC_SOCKETFUN socketfun;
-    IOC_MASKFUN maskfun;
     void *data;
     int destroyed;
     time_t last_event;
@@ -61,6 +57,7 @@ void iochan_man_destroy(iochan_man_t *mp);
 
 #define iochan_destroy(i) (void)((i)->destroyed = 1)
 #define iochan_getfd(i) ((i)->fd)
+#define iochan_setfd(i, d) ((i)->fd = d)
 #define iochan_getdata(i) ((i)->data)
 #define iochan_setdata(i, d) ((i)->data = d)
 #define iochan_setflags(i, d) ((i)->flags = d)
@@ -69,10 +66,6 @@ void iochan_man_destroy(iochan_man_t *mp);
 #define iochan_getflag(i, d) ((i)->flags & d ? 1 : 0)
 #define iochan_settimeout(i, t) ((i)->max_idle = (t), (i)->last_event = time(0))
 #define iochan_activity(i) ((i)->last_event = time(0))
-#define iochan_setsocketfun(i, f) ((i)->socketfun = (f))
-#define iochan_getsocketfun(i) ((i)->socketfun)
-#define iochan_setmaskfun(i, f) ((i)->maskfun = (f))
-#define iochan_getmaskfun(i) ((i)->maskfun)
 
 IOCHAN iochan_create(int fd, IOC_CALLBACK cb, int flags, const char *name);