--- libaitrpc/src/srv.c 2015/07/02 21:52:29 1.26.2.12 +++ libaitrpc/src/srv.c 2015/07/02 23:21:06 1.27.2.2 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.26.2.12 2015/07/02 21:52:29 misho Exp $ +* $Id: srv.c,v 1.27.2.2 2015/07/02 23:21:06 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -82,29 +82,6 @@ static sched_task_func_t cbProto[SOCK_MAX_SUPPORT][4] static volatile uintptr_t _glSigArg = 0; -#pragma GCC visibility push(hidden) - -static int -rpc_funcs_cmp(struct tagRPCFunc *a, struct tagRPCFunc *b) -{ - int ret; - - assert(a && b); - - ret = AIT_KEY(&a->func_name) - AIT_KEY(&b->func_name); - - if (ret < 0) - return -1; - else if (ret > 0) - return 1; - - return ret; -} - -AVL_GENERATE(tagRPCFuncs, tagRPCFunc, func_node, rpc_funcs_cmp); - -#pragma GCC visibility pop - void rpc_freeCli(rpc_cli_t * __restrict c) { @@ -547,7 +524,7 @@ rxUDPPacket(sched_task_t *task) /* receive connect packet */ 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); rpc = (struct tagRPCCall*) AIT_GET_BUF(&b); if (rlen < sizeof(struct tagRPCCall)) @@ -687,7 +664,7 @@ rxRAWPacket(sched_task_t *task) /* receive connect packet */ 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); if (sa.sa.sa_family == AF_INET) { struct ip *h; @@ -1190,7 +1167,11 @@ end: static void * flushBLOB(sched_task_t *task) { +#ifndef atomic_load_acq_ptr 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_blob_t *b, *tmp; @@ -1432,7 +1413,11 @@ rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv) /* disabled kqueue support in libaitsched */ struct sigaction sa; +#ifndef atomic_store_rel_ptr atomic_store_rel_ptr(&_glSigArg, (uintptr_t) srv); +#else + *((volatile uintptr_t*) &_glSigArg) = (uintptr_t) srv; +#endif memset(&sa, 0, sizeof sa); sigemptyset(&sa.sa_mask);