Diff for /libaitrpc/src/srv.c between versions 1.9.2.25 and 1.9.2.26

version 1.9.2.25, 2012/05/17 15:48:45 version 1.9.2.26, 2012/05/17 16:42:44
Line 592  rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s Line 592  rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s
  * @srv = RPC Server instance   * @srv = RPC Server instance
  * return: none   * return: none
  */   */
voidinline void
 rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv)  rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv)
 {  {
         rpc_cli_t *c;  
         register int i;  
         rpc_blob_t *b, *tmp;  
   
         if (!srv)          if (!srv)
                 return;                  return;
   
         /* close all clients connections & server socket */  
         for (i = 0; i < io_arraySize(srv->srv_blob.clients); i++) {  
                 c = io_array(srv->srv_blob.clients, i, rpc_cli_t*);  
                 if (c) {  
                         shutdown(c->cli_sock, SHUT_RDWR);  
                         close(c->cli_sock);  
   
                         schedCancelby(srv->srv_blob.root, taskMAX, CRITERIA_ARG, c, NULL);  
                         AIT_FREE_VAL(&c->cli_buf);  
                 }  
                 io_arrayDel(srv->srv_blob.clients, i, 42);  
         }  
         io_arrayDestroy(&srv->srv_blob.clients);  
   
         srv->srv_blob.kill = 1;          srv->srv_blob.kill = 1;
         if (srv->srv_blob.tid)  
                 pthread_cancel(srv->srv_blob.tid);  
   
         close(srv->srv_blob.server.cli_sock);  
   
         /* detach blobs */  
         TAILQ_FOREACH_SAFE(b, &srv->srv_blob.blobs, blob_node, tmp) {  
                 TAILQ_REMOVE(&srv->srv_blob.blobs, b, blob_node);  
   
                 rpc_srv_blobFree(srv, b);  
                 free(b);  
         }  
   
         schedEnd(&srv->srv_blob.root);  
         AIT_FREE_VAL(&srv->srv_blob.dir);  
 }  }
   
 /*  /*
Line 643  rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv) Line 610  rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv)
 int  int
 rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv)  rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv)
 {  {
           rpc_cli_t *c;
           register int i;
           rpc_blob_t *b, *tmp;
           struct timespec ts = { RPC_SCHED_POLLING, 0 };
   
         if (!srv || srv->srv_kill) {          if (!srv || srv->srv_kill) {
                 rpc_SetErr(EINVAL, "Invalid parameter can`t start BLOB server");                  rpc_SetErr(EINVAL, "Invalid parameter can`t start BLOB server");
                 return -1;                  return -1;
Line 662  rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv) Line 634  rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv)
                 return -1;                  return -1;
         }          }
   
           schedPolling(srv->srv_blob.root, &ts, NULL);
         /* main rpc loop */          /* main rpc loop */
         schedRun(srv->srv_blob.root, &srv->srv_blob.kill);          schedRun(srv->srv_blob.root, &srv->srv_blob.kill);
   
           /* close all clients connections & server socket */
           for (i = 0; i < io_arraySize(srv->srv_blob.clients); i++) {
                   c = io_array(srv->srv_blob.clients, i, rpc_cli_t*);
                   if (c) {
                           shutdown(c->cli_sock, SHUT_RDWR);
                           close(c->cli_sock);
   
                           schedCancelby(srv->srv_blob.root, taskMAX, CRITERIA_ARG, c, NULL);
                           AIT_FREE_VAL(&c->cli_buf);
                   }
                   io_arrayDel(srv->srv_blob.clients, i, 42);
           }
           io_arrayDestroy(&srv->srv_blob.clients);
   
           close(srv->srv_blob.server.cli_sock);
   
           /* detach blobs */
           TAILQ_FOREACH_SAFE(b, &srv->srv_blob.blobs, blob_node, tmp) {
                   TAILQ_REMOVE(&srv->srv_blob.blobs, b, blob_node);
   
                   rpc_srv_blobFree(srv, b);
                   free(b);
           }
   
           schedEnd(&srv->srv_blob.root);
           AIT_FREE_VAL(&srv->srv_blob.dir);
         return 0;          return 0;
 }  }
   
Line 791  err: /* error condition */ Line 791  err: /* error condition */
 void  void
 rpc_srv_endServer(rpc_srv_t ** __restrict psrv)  rpc_srv_endServer(rpc_srv_t ** __restrict psrv)
 {  {
         rpc_cli_t *c;  
         register int i;  
         rpc_func_t *f, *tmp;  
   
         if (!psrv || !*psrv)          if (!psrv || !*psrv)
                 return;                  return;
   
           /* if send kill to blob server */
         if (!(*psrv)->srv_blob.kill)          if (!(*psrv)->srv_blob.kill)
                 rpc_srv_endBLOBServer(*psrv);                  rpc_srv_endBLOBServer(*psrv);
   
        /* close all clients connections & server socket */        (*psrv)->srv_kill = 1;
        for (i = 0; i < io_arraySize((*psrv)->srv_clients); i++) {        sleep(RPC_SCHED_POLLING);
                c = io_array((*psrv)->srv_clients, i, rpc_cli_t*); 
                if (c) { 
                        shutdown(c->cli_sock, SHUT_RDWR); 
                        close(c->cli_sock); 
   
                         schedCancelby((*psrv)->srv_root, taskMAX, CRITERIA_ARG, c, NULL);  
                         AIT_FREE_VAL(&c->cli_buf);  
                 }  
                 io_arrayDel((*psrv)->srv_clients, i, 42);  
         }  
         io_arrayDestroy(&(*psrv)->srv_clients);  
   
         close((*psrv)->srv_server.cli_sock);  
   
         /* detach exported calls */  
         TAILQ_FOREACH_SAFE(f, &(*psrv)->srv_funcs, func_node, tmp) {  
                 TAILQ_REMOVE(&(*psrv)->srv_funcs, f, func_node);  
   
                 io_freeVars(&f->func_vars);  
                 AIT_FREE_VAL(&f->func_name);  
                 free(f);  
         }  
   
         schedEnd(&(*psrv)->srv_root);  
         free(*psrv);          free(*psrv);
         *psrv = NULL;          *psrv = NULL;
 }  }
Line 840  rpc_srv_endServer(rpc_srv_t ** __restrict psrv) Line 814  rpc_srv_endServer(rpc_srv_t ** __restrict psrv)
 int  int
 rpc_srv_loopServer(rpc_srv_t * __restrict srv)  rpc_srv_loopServer(rpc_srv_t * __restrict srv)
 {  {
           rpc_cli_t *c;
           register int i;
           rpc_func_t *f, *tmp;
           struct timespec ts = { RPC_SCHED_POLLING, 0 };
   
         if (!srv) {          if (!srv) {
                 rpc_SetErr(EINVAL, "Invalid parameter can`t start RPC server");                  rpc_SetErr(EINVAL, "Invalid parameter can`t start RPC server");
                 return -1;                  return -1;
Line 858  rpc_srv_loopServer(rpc_srv_t * __restrict srv) Line 837  rpc_srv_loopServer(rpc_srv_t * __restrict srv)
                 return -1;                  return -1;
         }          }
   
           schedPolling(srv->srv_root, &ts, NULL);
         /* main rpc loop */          /* main rpc loop */
         schedRun(srv->srv_root, &srv->srv_kill);          schedRun(srv->srv_root, &srv->srv_kill);
   
           /* close all clients connections & server socket */
           for (i = 0; i < io_arraySize(srv->srv_clients); i++) {
                   c = io_array(srv->srv_clients, i, rpc_cli_t*);
                   if (c) {
                           shutdown(c->cli_sock, SHUT_RDWR);
                           close(c->cli_sock);
   
                           schedCancelby(srv->srv_root, taskMAX, CRITERIA_ARG, c, NULL);
                           AIT_FREE_VAL(&c->cli_buf);
                   }
                   io_arrayDel(srv->srv_clients, i, 42);
           }
           io_arrayDestroy(&srv->srv_clients);
   
           close(srv->srv_server.cli_sock);
   
           /* detach exported calls */
           TAILQ_FOREACH_SAFE(f, &srv->srv_funcs, func_node, tmp) {
                   TAILQ_REMOVE(&srv->srv_funcs, f, func_node);
   
                   io_freeVars(&f->func_vars);
                   AIT_FREE_VAL(&f->func_name);
                   free(f);
           }
   
           schedEnd(&srv->srv_root);
         return 0;          return 0;
 }  }
   

Removed from v.1.9.2.25  
changed lines
  Added in v.1.9.2.26


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