--- libaitrpc/src/lists.c 2013/07/15 14:54:40 1.14.2.1 +++ libaitrpc/src/lists.c 2013/07/15 15:10:38 1.14.2.2 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: lists.c,v 1.14.2.1 2013/07/15 14:54:40 misho Exp $ +* $Id: lists.c,v 1.14.2.2 2013/07/15 15:10:38 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -184,17 +184,17 @@ toutBLOB(sched_task_t *task) * @srv = RPC Server instance * @len = BLOB length * @tout = BLOB live timeout in seconds - * @task = task called this function + * @c = RPC Client * return: NULL error or new registered BLOB */ rpc_blob_t * rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_t len, int tout, - sched_task_t * __restrict task) + rpc_cli_t * __restrict c) { rpc_blob_t *blob = NULL; struct timespec ts = { tout ? tout : RPC_BLOB_TIMEOUT, 0 }; - if (!srv || !len) { + if (!srv || !len || !c) { rpc_SetErr(EINVAL, "Invalid parameter can`t register BLOB variable"); return blob; } @@ -203,7 +203,7 @@ rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_ TAILQ_INSERT_TAIL(&srv->srv_blob.blobs, blob, blob_node); - schedTimer(TASK_ROOT(task), toutBLOB, TASK_ARG(task), ts, + schedTimer(srv->srv_blob.root, toutBLOB, c, ts, (void*) (intptr_t) blob->blob_var, blob->blob_len); return blob; } @@ -230,6 +230,9 @@ rpc_srv_unregisterBLOB(rpc_srv_t * __restrict srv, uin return 0; TAILQ_REMOVE(&srv->srv_blob.blobs, b, blob_node); + + schedCancelby(srv->srv_blob.root, taskTIMER, CRITERIA_DATA, + (void*) (intptr_t) b->blob_var, NULL); rpc_srv_blobFree(srv, b); e_free(b);