Diff for /libaitrpc/src/srv.c between versions 1.12.2.7 and 1.12.2.11

version 1.12.2.7, 2012/11/19 14:51:52 version 1.12.2.11, 2012/11/19 21:35:43
Line 67  static sched_task_func_t cbProto[SOCK_RAW + 1][4] = { Line 67  static sched_task_func_t cbProto[SOCK_RAW + 1][4] = {
 };  };
   
   
   inline void
   rpc_freeCli(rpc_cli_t * __restrict c)
   {
           rpc_srv_t *s = c->cli_parent;
   
           schedCancelby(s->srv_root, taskMAX, CRITERIA_ARG, c, NULL);
   
           /* free buffer */
           AIT_FREE_VAL(&c->cli_buf);
   
           io_arrayDel(s->srv_clients, c->cli_id, 0);
           if (c)
                   io_free(c);
   }
   
   
 static inline int  static inline int
 _check4freeslot(rpc_srv_t * __restrict srv, io_sockaddr_t * __restrict sa)  _check4freeslot(rpc_srv_t * __restrict srv, io_sockaddr_t * __restrict sa)
 {  {
Line 121  _allocClient(rpc_srv_t * __restrict srv, io_sockaddr_t Line 137  _allocClient(rpc_srv_t * __restrict srv, io_sockaddr_t
 static void *  static void *
 freeClient(sched_task_t *task)  freeClient(sched_task_t *task)
 {  {
        rpc_cli_t *c = TASK_ARG(task);        rpc_freeCli(TASK_ARG(task));
        rpc_srv_t *s = c->cli_parent; 
   
         schedCancelby(TASK_ROOT(task), taskMAX, CRITERIA_ARG, TASK_ARG(task), NULL);  
   
         /* free buffer */  
         AIT_FREE_VAL(&c->cli_buf);  
   
         io_arrayDel(s->srv_clients, c->cli_id, 0);  
         if (c)  
                 io_free(c);  
         return NULL;          return NULL;
 }  }
   
 static void *  static void *
 closeClient(sched_task_t *task)  closeClient(sched_task_t *task)
 {  {
        rpc_cli_t *c = TASK_ARG(task);        int sock = ((rpc_cli_t*) TASK_ARG(task))->cli_sock;
        rpc_srv_t *s = c->cli_parent; 
   
        schedCancelby(TASK_ROOT(task), taskMAX, CRITERIA_ARG, TASK_ARG(task), NULL);        rpc_freeCli(TASK_ARG(task));
   
         /* close client socket */          /* close client socket */
        if (TASK_VAL(task))        shutdown(sock, SHUT_RDWR);
                shutdown(c->cli_sock, SHUT_RDWR);        close(sock);
        close(c->cli_sock); 
 
        /* free buffer */ 
        AIT_FREE_VAL(&c->cli_buf); 
 
        io_arrayDel(s->srv_clients, c->cli_id, 0); 
        if (c) 
                io_free(c); 
         return NULL;          return NULL;
 }  }
   
Line 204  txPacket(sched_task_t *task) Line 202  txPacket(sched_task_t *task)
         if (ret == -1 || ret != wlen) {          if (ret == -1 || ret != wlen) {
                 /* close connection */                  /* close connection */
                 schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT],                   schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], 
                                TASK_ARG(task), 42, NULL, 0);                                TASK_ARG(task), 0, NULL, 0);
         }          }
   
         return NULL;          return NULL;
Line 281  rxPacket(sched_task_t *task) Line 279  rxPacket(sched_task_t *task)
         if (rlen < 1) {          if (rlen < 1) {
                 /* close connection */                  /* close connection */
                 schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT],                   schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], 
                                TASK_ARG(task), 42, NULL, 0);                                TASK_ARG(task), 0, NULL, 0);
                 return NULL;                  return NULL;
         } else {          } else {
                 rlen += off;    /* add reminded bytes from previous rxPacket, if exists! */                  rlen += off;    /* add reminded bytes from previous rxPacket, if exists! */
Line 429  txUDPPacket(sched_task_t *task) Line 427  txUDPPacket(sched_task_t *task)
         if (ret == -1 || ret != wlen) {          if (ret == -1 || ret != wlen) {
                 /* close connection */                  /* close connection */
                 schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT],                   schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], 
                                 TASK_ARG(task), 42, NULL, 0);                                 TASK_ARG(task), 0, NULL, 0);
         }          }
   
         return NULL;          return NULL;
Line 457  rxUDPPacket(sched_task_t *task) Line 455  rxUDPPacket(sched_task_t *task)
         if (!c)          if (!c)
                 goto end;                  goto end;
         else {          else {
                   c->cli_sock = TASK_FD(task);
                 memcpy(&c->cli_sa, &sa, sizeof c->cli_sa);                  memcpy(&c->cli_sa, &sa, sizeof c->cli_sa);
                 memcpy(AIT_GET_BUF(&c->cli_buf), buf, AIT_LEN(&c->cli_buf));                  memcpy(AIT_GET_BUF(&c->cli_buf), buf, AIT_LEN(&c->cli_buf));
                 /* armed timer for close stateless connection */                  /* armed timer for close stateless connection */
Line 522  end: Line 521  end:
   
 /* ------------------------------------------------------ */  /* ------------------------------------------------------ */
   
static void *inline void
closeBLOBClient(sched_task_t *task)rpc_freeBLOBCli(rpc_cli_t * __restrict c)
 {  {
         rpc_cli_t *c = TASK_ARG(task);  
         rpc_srv_t *s = c->cli_parent;          rpc_srv_t *s = c->cli_parent;
   
        schedCancelby(TASK_ROOT(task), taskMAX, CRITERIA_ARG, TASK_ARG(task), NULL);        schedCancelby(s->srv_blob.root, taskMAX, CRITERIA_ARG, c, NULL);
   
         /* close client socket */  
         if (TASK_VAL(task))  
                 shutdown(c->cli_sock, SHUT_RDWR);  
         close(c->cli_sock);  
   
         /* free buffer */          /* free buffer */
         AIT_FREE_VAL(&c->cli_buf);          AIT_FREE_VAL(&c->cli_buf);
   
         io_arrayDel(s->srv_blob.clients, c->cli_id, 0);          io_arrayDel(s->srv_blob.clients, c->cli_id, 0);
         if (c)          if (c)
                 io_free(c);                  io_free(c);
   }
   
   
   static void *
   closeBLOBClient(sched_task_t *task)
   {
           int sock = ((rpc_cli_t*) TASK_ARG(task))->cli_sock;
   
           rpc_freeBLOBCli(TASK_ARG(task));
   
           /* close client socket */
           shutdown(sock, SHUT_RDWR);
           close(sock);
         return NULL;          return NULL;
 }  }
   

Removed from v.1.12.2.7  
changed lines
  Added in v.1.12.2.11


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>