--- libaitio/src/sock.c 2013/11/21 18:59:50 1.4.4.6 +++ libaitio/src/sock.c 2013/11/22 08:23:51 1.4.4.7 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: sock.c,v 1.4.4.6 2013/11/21 18:59:50 misho Exp $ +* $Id: sock.c,v 1.4.4.7 2013/11/22 08:23:51 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -57,6 +57,10 @@ io_closeClient(sched_task_t *task) TAILQ_REMOVE(&s->sock_cli, cli, cli_node); pthread_mutex_unlock(&s->sock_mtx); + schedCancelby(s->sock_root, taskTIMER, CRITERIA_DATLEN, + (void*) cli->cli_fd, NULL); + schedCancelby(s->sock_root, taskMAX, CRITERIA_ARG, cli, NULL); + if (s->sock_type == SOCK_STREAM) { shutdown(sock, SHUT_RDWR); close(sock); @@ -119,7 +123,13 @@ end: taskExit(task, NULL); } +static void * +io_bridgeSock(sched_task_t *task) +{ + taskExit(task, NULL); +} + /* * ioInitSocket() - Init socket and allocate resources * @@ -224,8 +234,7 @@ ioCloseSocket(sock_t ** __restrict s) schedCancelby((*s)->sock_root, taskTIMER, CRITERIA_DATLEN, (void*) cli->cli_fd, NULL); - schedCancelby((*s)->sock_root, taskMAX, CRITERIA_FD, - (void*) cli->cli_fd, NULL); + schedCancelby((*s)->sock_root, taskMAX, CRITERIA_ARG, cli, NULL); if ((*s)->sock_type == SOCK_STREAM) { shutdown(cli->cli_fd, SHUT_RDWR); @@ -371,6 +380,5 @@ ioBridgeProg2Socket(sock_t * __restrict s, const char if (!s || !prgname || s->sock_kill) return -1; - schedRead(s->sock_root, io_bridgeProg, s, s->sock_fd, prgname, 0); - return schedRun(s->sock_root, &s->sock_kill); + return ioLoopSocket(s, io_bridgeSock); }