Diff for /libaitrpc/src/srv.c between versions 1.26.2.9 and 1.27.2.2

version 1.26.2.9, 2015/06/29 22:39:33 version 1.27.2.2, 2015/07/02 23:21:06
Line 82  static sched_task_func_t cbProto[SOCK_MAX_SUPPORT][4]  Line 82  static sched_task_func_t cbProto[SOCK_MAX_SUPPORT][4] 
   
 static volatile uintptr_t _glSigArg = 0;  static volatile uintptr_t _glSigArg = 0;
   
   
 void  void
 rpc_freeCli(rpc_cli_t * __restrict c)  rpc_freeCli(rpc_cli_t * __restrict c)
 {  {
Line 197  txPacket(sched_task_t *task) Line 196  txPacket(sched_task_t *task)
                         rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");                          rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                        rpc->call_rep.ret = RPC_ERROR(-1);                        RPC_SET_RETURN(rpc, -1);
                        rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                        RPC_SET_ERRNO(rpc, rpc_Errno);
                 } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) {                  } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) {
                         rpc_SetErr(EMSGSIZE, "Message too long");                          rpc_SetErr(EMSGSIZE, "Message too long");
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                        rpc->call_rep.ret = RPC_ERROR(-1);                        RPC_SET_RETURN(rpc, -1);
                        rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                        RPC_SET_ERRNO(rpc, rpc_Errno);
                 } else {                  } else {
                         rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c));                          rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c));
                         /* Go Encapsulate variables */                          /* Go Encapsulate variables */
Line 214  txPacket(sched_task_t *task) Line 213  txPacket(sched_task_t *task)
                                 rpc_SetErr(EBADRPC, "Prepare RPC packet failed");                                  rpc_SetErr(EBADRPC, "Prepare RPC packet failed");
   
                                 rpc->call_argc ^= rpc->call_argc;                                  rpc->call_argc ^= rpc->call_argc;
                                rpc->call_rep.ret = RPC_ERROR(-1);                                RPC_SET_RETURN(rpc, -1);
                                rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                                RPC_SET_ERRNO(rpc, rpc_Errno);
                         } else                          } else
                                 wlen += ret;                                  wlen += ret;
                 }                  }
Line 263  execCall(sched_task_t *task) Line 262  execCall(sched_task_t *task)
                         rpc_SetErr(ERPCMISMATCH, "#%d - %s", elwix_GetErrno(), elwix_GetError());                          rpc_SetErr(ERPCMISMATCH, "#%d - %s", elwix_GetErrno(), elwix_GetError());
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                        rpc->call_rep.ret = RPC_ERROR(-1);                        RPC_SET_RETURN(rpc, -1);
                        rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                        RPC_SET_ERRNO(rpc, rpc_Errno);
                         taskExit(task, NULL);                          taskExit(task, NULL);
                 }                  }
         } else          } else
Line 274  execCall(sched_task_t *task) Line 273  execCall(sched_task_t *task)
                 rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");                  rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");
   
                 rpc->call_argc ^= rpc->call_argc;                  rpc->call_argc ^= rpc->call_argc;
                rpc->call_rep.ret = RPC_ERROR(-1);                RPC_SET_RETURN(rpc, -1);
                rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                RPC_SET_ERRNO(rpc, rpc_Errno);
         } else {          } else {
                 /* if client doesn't want reply */                  /* if client doesn't want reply */
                rpc->call_rep.ret = RPC_ERROR(rpc_srv_execCall(c, rpc, f->func_name, arr));                RPC_SET_RETURN(rpc, rpc_srv_execCall(c, rpc, f->func_name, arr));
                 if (rpc->call_rep.ret == htonl(-1)) {                  if (rpc->call_rep.ret == htonl(-1)) {
                         if (!rpc->call_rep.eno) {                          if (!rpc->call_rep.eno) {
                                 LOGERR;                                  LOGERR;
                                rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                                RPC_SET_ERRNO(rpc, rpc_Errno);
                         }                          }
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                         ait_freeVars(&c->cli_vars);                          ait_freeVars(&c->cli_vars);
Line 313  rxPacket(sched_task_t *task) Line 312  rxPacket(sched_task_t *task)
         u_short crc;          u_short crc;
 #endif  #endif
         u_char *buf = AIT_GET_BUF(&c->cli_buf);          u_char *buf = AIT_GET_BUF(&c->cli_buf);
           u_char b[sizeof(struct tagRPCCall)];
         struct tagRPCCall *rpc = (struct tagRPCCall*) buf;          struct tagRPCCall *rpc = (struct tagRPCCall*) buf;
 #ifdef TCP_SESSION_TIMEOUT  #ifdef TCP_SESSION_TIMEOUT
         struct timespec ts = { DEF_RPC_TIMEOUT, 0 };          struct timespec ts = { DEF_RPC_TIMEOUT, 0 };
Line 322  rxPacket(sched_task_t *task) Line 322  rxPacket(sched_task_t *task)
                          TASK_ARG(task), ts, TASK_ARG(task), 0);                           TASK_ARG(task), ts, TASK_ARG(task), 0);
 #endif  #endif
   
           /* prepare rx */
           len = recv(TASK_FD(task), b, sizeof b, MSG_PEEK);
           if (len == sizeof b)
                   rlen = ntohl(((struct tagRPCCall*) b)->call_len);
   
         rlen = recv(TASK_FD(task), buf, rlen, 0);          rlen = recv(TASK_FD(task), buf, rlen, 0);
         if (rlen == -1) {          if (rlen == -1) {
                 /* close connection */                  /* close connection */
Line 333  rxPacket(sched_task_t *task) Line 338  rxPacket(sched_task_t *task)
                 rpc_SetErr(ERPCMISMATCH, "Short RPC packet");                  rpc_SetErr(ERPCMISMATCH, "Short RPC packet");
   
                 rpc->call_argc ^= rpc->call_argc;                  rpc->call_argc ^= rpc->call_argc;
                rpc->call_rep.ret = RPC_ERROR(-1);                RPC_SET_RETURN(rpc, -1);
                rpc->call_rep.eno = RPC_ERROR(errno);                RPC_SET_ERRNO(rpc, rpc_Errno);
                 goto err;                  goto err;
         } else          } else
                 len = ntohl(rpc->call_len);                  len = ntohl(rpc->call_len);
Line 342  rxPacket(sched_task_t *task) Line 347  rxPacket(sched_task_t *task)
                 rpc_SetErr(ERPCMISMATCH, "Short RPC packet");                  rpc_SetErr(ERPCMISMATCH, "Short RPC packet");
   
                 rpc->call_argc ^= rpc->call_argc;                  rpc->call_argc ^= rpc->call_argc;
                rpc->call_rep.ret = RPC_ERROR(-1);                RPC_SET_RETURN(rpc, -1);
                rpc->call_rep.eno = RPC_ERROR(errno);                RPC_SET_ERRNO(rpc, rpc_Errno);
                 goto err;                  goto err;
         }          }
   
Line 361  rxPacket(sched_task_t *task) Line 366  rxPacket(sched_task_t *task)
                 rpc_SetErr(ERPCMISMATCH, "Bad CRC RPC packet");                  rpc_SetErr(ERPCMISMATCH, "Bad CRC RPC packet");
   
                 rpc->call_argc ^= rpc->call_argc;                  rpc->call_argc ^= rpc->call_argc;
                rpc->call_rep.ret = RPC_ERROR(-1);                RPC_SET_RETURN(rpc, -1);
                rpc->call_rep.eno = RPC_ERROR(errno);                RPC_SET_ERRNO(rpc, rpc_Errno);
                 goto err;                  goto err;
         }          }
 #endif  #endif
Line 372  rxPacket(sched_task_t *task) Line 377  rxPacket(sched_task_t *task)
                 rpc_SetErr(ERPCMISMATCH, "Get invalid RPC session");                  rpc_SetErr(ERPCMISMATCH, "Get invalid RPC session");
   
                 rpc->call_argc ^= rpc->call_argc;                  rpc->call_argc ^= rpc->call_argc;
                rpc->call_rep.ret = RPC_ERROR(-1);                RPC_SET_RETURN(rpc, -1);
                rpc->call_rep.eno = RPC_ERROR(errno);                RPC_SET_ERRNO(rpc, rpc_Errno);
                 goto err;                  goto err;
         }          }
   
Line 458  txUDPPacket(sched_task_t *task) Line 463  txUDPPacket(sched_task_t *task)
                         rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");                          rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                        rpc->call_rep.ret = RPC_ERROR(-1);                        RPC_SET_RETURN(rpc, -1);
                        rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                        RPC_SET_ERRNO(rpc, rpc_Errno);
                 } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) {                  } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) {
                         rpc_SetErr(EMSGSIZE, "Message too long");                          rpc_SetErr(EMSGSIZE, "Message too long");
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                        rpc->call_rep.ret = RPC_ERROR(-1);                        RPC_SET_RETURN(rpc, -1);
                        rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                        RPC_SET_ERRNO(rpc, rpc_Errno);
                 } else {                  } else {
                         rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c));                          rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c));
                         /* Go Encapsulate variables */                          /* Go Encapsulate variables */
Line 475  txUDPPacket(sched_task_t *task) Line 480  txUDPPacket(sched_task_t *task)
                                 rpc_SetErr(EBADRPC, "Prepare RPC packet failed");                                  rpc_SetErr(EBADRPC, "Prepare RPC packet failed");
   
                                 rpc->call_argc ^= rpc->call_argc;                                  rpc->call_argc ^= rpc->call_argc;
                                rpc->call_rep.ret = RPC_ERROR(-1);                                RPC_SET_RETURN(rpc, -1);
                                rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                                RPC_SET_ERRNO(rpc, rpc_Errno);
                         } else                          } else
                                 wlen += ret;                                  wlen += ret;
                 }                  }
Line 519  rxUDPPacket(sched_task_t *task) Line 524  rxUDPPacket(sched_task_t *task)
   
         /* receive connect packet */          /* receive connect packet */
         AIT_SET_BUF(&b, NULL, srv->srv_netbuf);          AIT_SET_BUF(&b, NULL, srv->srv_netbuf);
        salen = sa.ss.ss_len = sizeof(sockaddr_t);        salen = sa.ss.ss_len = (u_char) sizeof(sockaddr_t);
         rlen = recvfrom(TASK_FD(task), AIT_GET_BUF(&b), AIT_LEN(&b), 0, &sa.sa, &salen);          rlen = recvfrom(TASK_FD(task), AIT_GET_BUF(&b), AIT_LEN(&b), 0, &sa.sa, &salen);
         rpc = (struct tagRPCCall*) AIT_GET_BUF(&b);          rpc = (struct tagRPCCall*) AIT_GET_BUF(&b);
         if (rlen < sizeof(struct tagRPCCall))          if (rlen < sizeof(struct tagRPCCall))
Line 598  txRAWPacket(sched_task_t *task) Line 603  txRAWPacket(sched_task_t *task)
                         rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");                          rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                        rpc->call_rep.ret = RPC_ERROR(-1);                        RPC_SET_RETURN(rpc, -1);
                        rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                        RPC_SET_ERRNO(rpc, rpc_Errno);
                 } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) {                  } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) {
                         rpc_SetErr(EMSGSIZE, "Message too long");                          rpc_SetErr(EMSGSIZE, "Message too long");
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                        rpc->call_rep.ret = RPC_ERROR(-1);                        RPC_SET_RETURN(rpc, -1);
                        rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                        RPC_SET_ERRNO(rpc, rpc_Errno);
                 } else {                  } else {
                         rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c));                          rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c));
                         /* Go Encapsulate variables */                          /* Go Encapsulate variables */
Line 613  txRAWPacket(sched_task_t *task) Line 618  txRAWPacket(sched_task_t *task)
                                         RPC_RETVARS(c));                                          RPC_RETVARS(c));
                         if (ret == -1) {                          if (ret == -1) {
                                 rpc_SetErr(EBADRPC, "Prepare RPC packet failed");                                  rpc_SetErr(EBADRPC, "Prepare RPC packet failed");
   
                                 rpc->call_argc ^= rpc->call_argc;                                  rpc->call_argc ^= rpc->call_argc;
                                rpc->call_rep.ret = RPC_ERROR(-1);                                RPC_SET_RETURN(rpc, -1);
                                rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                                RPC_SET_ERRNO(rpc, rpc_Errno);
                         } else                          } else
                                 wlen += ret;                                  wlen += ret;
                 }                  }
Line 658  rxRAWPacket(sched_task_t *task) Line 664  rxRAWPacket(sched_task_t *task)
   
         /* receive connect packet */          /* receive connect packet */
         AIT_SET_BUF(&b, NULL, srv->srv_netbuf);          AIT_SET_BUF(&b, NULL, srv->srv_netbuf);
        salen = sa.ss.ss_len = sizeof(sockaddr_t);        salen = sa.ss.ss_len = (u_char) sizeof(sockaddr_t);
         rlen = recvfrom(TASK_FD(task), AIT_GET_BUF(&b), AIT_LEN(&b), 0, &sa.sa, &salen);          rlen = recvfrom(TASK_FD(task), AIT_GET_BUF(&b), AIT_LEN(&b), 0, &sa.sa, &salen);
         if (sa.sa.sa_family == AF_INET) {          if (sa.sa.sa_family == AF_INET) {
                 struct ip *h;                  struct ip *h;
Line 758  txBPFPacket(sched_task_t *task) Line 764  txBPFPacket(sched_task_t *task)
                         rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");                          rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                        rpc->call_rep.ret = RPC_ERROR(-1);                        RPC_SET_RETURN(rpc, -1);
                        rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                        RPC_SET_ERRNO(rpc, rpc_Errno);
                 } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) {                  } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) {
                         rpc_SetErr(EMSGSIZE, "Message too long");                          rpc_SetErr(EMSGSIZE, "Message too long");
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                        rpc->call_rep.ret = RPC_ERROR(-1);                        RPC_SET_RETURN(rpc, -1);
                        rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                        RPC_SET_ERRNO(rpc, rpc_Errno);
                 } else {                  } else {
                         rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c));                          rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c));
                         /* Go Encapsulate variables */                          /* Go Encapsulate variables */
Line 775  txBPFPacket(sched_task_t *task) Line 781  txBPFPacket(sched_task_t *task)
                                 rpc_SetErr(EBADRPC, "Prepare RPC packet failed");                                  rpc_SetErr(EBADRPC, "Prepare RPC packet failed");
   
                                 rpc->call_argc ^= rpc->call_argc;                                  rpc->call_argc ^= rpc->call_argc;
                                rpc->call_rep.ret = RPC_ERROR(-1);                                RPC_SET_RETURN(rpc, -1);
                                rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                                RPC_SET_ERRNO(rpc, rpc_Errno);
                         } else                          } else
                                 wlen += ret;                                  wlen += ret;
                 }                  }
Line 921  txEXTPacket(sched_task_t *task) Line 927  txEXTPacket(sched_task_t *task)
                         rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");                          rpc_SetErr(EPROGUNAVAIL, "Function not found at RPC server");
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                        rpc->call_rep.ret = RPC_ERROR(-1);                        RPC_SET_RETURN(rpc, -1);
                        rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                        RPC_SET_ERRNO(rpc, rpc_Errno);
                 } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) {                  } else if (rpc_pktFreeSpace(c) > s->srv_netbuf) {
                         rpc_SetErr(EMSGSIZE, "Message too long");                          rpc_SetErr(EMSGSIZE, "Message too long");
   
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
                        rpc->call_rep.ret = RPC_ERROR(-1);                        RPC_SET_RETURN(rpc, -1);
                        rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                        RPC_SET_ERRNO(rpc, rpc_Errno);
                 } else {                  } else {
                         rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c));                          rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c));
                         /* Go Encapsulate variables */                          /* Go Encapsulate variables */
Line 938  txEXTPacket(sched_task_t *task) Line 944  txEXTPacket(sched_task_t *task)
                                 rpc_SetErr(EBADRPC, "Prepare RPC packet failed");                                  rpc_SetErr(EBADRPC, "Prepare RPC packet failed");
   
                                 rpc->call_argc ^= rpc->call_argc;                                  rpc->call_argc ^= rpc->call_argc;
                                rpc->call_rep.ret = RPC_ERROR(-1);                                RPC_SET_RETURN(rpc, -1);
                                rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                                RPC_SET_ERRNO(rpc, rpc_Errno);
                         } else                          } else
                                 wlen += ret;                                  wlen += ret;
                 }                  }
Line 1111  rxBLOB(sched_task_t *task) Line 1117  rxBLOB(sched_task_t *task)
                         if (!(b = rpc_srv_getBLOB(s, ntohl(blob.hdr_var)))) {                          if (!(b = rpc_srv_getBLOB(s, ntohl(blob.hdr_var)))) {
                                 rpc_SetErr(EINVAL, "Var=%x not found", ntohl(blob.hdr_var));                                  rpc_SetErr(EINVAL, "Var=%x not found", ntohl(blob.hdr_var));
                                 blob.hdr_cmd = no;                                  blob.hdr_cmd = no;
                                blob.hdr_ret = RPC_ERROR(-1);                                RPC_SET_BLOB_RET(&blob, -1);
                                 break;                                  break;
                         } else                          } else
                                 blob.hdr_len = htonl(b->blob_len);                                  blob.hdr_len = htonl(b->blob_len);
Line 1122  rxBLOB(sched_task_t *task) Line 1128  rxBLOB(sched_task_t *task)
                                 rpc_srv_blobUnmap(b);                                  rpc_srv_blobUnmap(b);
                         } else {                          } else {
                                 blob.hdr_cmd = error;                                  blob.hdr_cmd = error;
                                blob.hdr_ret = RPC_ERROR(-1);                                RPC_SET_BLOB_RET(&blob, -1);
                         }                          }
                         break;                          break;
                 case set:                  case set:
Line 1136  rxBLOB(sched_task_t *task) Line 1142  rxBLOB(sched_task_t *task)
                                 rpc_srv_blobUnmap(b);                                  rpc_srv_blobUnmap(b);
                         } else {                          } else {
                                 blob.hdr_cmd = error;                                  blob.hdr_cmd = error;
                                blob.hdr_ret = RPC_ERROR(-1);                                RPC_SET_BLOB_RET(&blob, -1);
                         }                          }
                         break;                          break;
                 case unset:                  case unset:
                         if (rpc_srv_unregisterBLOB(s, ntohl(blob.hdr_var)) == -1) {                          if (rpc_srv_unregisterBLOB(s, ntohl(blob.hdr_var)) == -1) {
                                 blob.hdr_cmd = error;                                  blob.hdr_cmd = error;
                                blob.hdr_ret = RPC_ERROR(-1);                                RPC_SET_BLOB_RET(&blob, -1);
                         }                          }
                         break;                          break;
                 default:                  default:
                         rpc_SetErr(EPROCUNAVAIL, "Unsupported BLOB command %d", blob.hdr_cmd);                          rpc_SetErr(EPROCUNAVAIL, "Unsupported BLOB command %d", blob.hdr_cmd);
                         blob.hdr_cmd = error;                          blob.hdr_cmd = error;
                        blob.hdr_ret = RPC_ERROR(-1);                        RPC_SET_BLOB_RET(&blob, -1);
         }          }
   
 end:  end:
Line 1161  end: Line 1167  end:
 static void *  static void *
 flushBLOB(sched_task_t *task)  flushBLOB(sched_task_t *task)
 {  {
   #ifndef atomic_load_acq_ptr
         uintptr_t sigArg = atomic_load_acq_ptr(&_glSigArg);          uintptr_t sigArg = atomic_load_acq_ptr(&_glSigArg);
   #else
           uintptr_t sigArg = *((volatile uintptr_t*) &_glSigArg);
   #endif
         rpc_srv_t *srv = sigArg ? (void*) sigArg : TASK_ARG(task);          rpc_srv_t *srv = sigArg ? (void*) sigArg : TASK_ARG(task);
         rpc_blob_t *b, *tmp;          rpc_blob_t *b, *tmp;
   
Line 1403  rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv) Line 1413  rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv)
                 /* disabled kqueue support in libaitsched */                  /* disabled kqueue support in libaitsched */
                 struct sigaction sa;                  struct sigaction sa;
   
   #ifndef atomic_store_rel_ptr
                 atomic_store_rel_ptr(&_glSigArg, (uintptr_t) srv);                  atomic_store_rel_ptr(&_glSigArg, (uintptr_t) srv);
   #else
                   *((volatile uintptr_t*) &_glSigArg) = (uintptr_t) srv;
   #endif
   
                 memset(&sa, 0, sizeof sa);                  memset(&sa, 0, sizeof sa);
                 sigemptyset(&sa.sa_mask);                  sigemptyset(&sa.sa_mask);

Removed from v.1.26.2.9  
changed lines
  Added in v.1.27.2.2


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