From 6ad8e1931d2df52ff173e4b83a5c3c0e1812b931 Mon Sep 17 00:00:00 2001 From: tick Date: Tue, 20 Nov 2007 04:17:35 +0000 Subject: [gsmd] Adding atcmd_terminate_matching (remove from the queues any command whose .ctx matches given)(Andrzej Zaborowski) git-svn-id: http://svn.openmoko.org/trunk/src/target/gsm@3447 99fdad57-331a-0410-800a-d7fa5415bdb3 --- src/gsmd/atcmd.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/gsmd/atcmd.c') diff --git a/src/gsmd/atcmd.c b/src/gsmd/atcmd.c index 747000b..2b5825a 100644 --- a/src/gsmd/atcmd.c +++ b/src/gsmd/atcmd.c @@ -719,3 +719,30 @@ int atcmd_init(struct gsmd *g, int sockfd) return gsmd_register_fd(&g->gfd_uart); } + +/* remove from the queues any command whose .ctx matches given */ +int atcmd_terminate_matching(struct gsmd *g, void *ctx) +{ + int num = 0; + struct gsmd_atcmd *cmd, *pos; + + llist_for_each_entry_safe(cmd, pos, &g->busy_atcmds, list) + if (cmd->ctx == ctx) { + cmd->ret = -ESHUTDOWN; + cmd->cb(cmd, cmd->ctx, "ERROR"); + cmd->cb = NULL; + cmd->ctx = NULL; + num ++; + } + + llist_for_each_entry_safe(cmd, pos, &g->pending_atcmds, list) + if (cmd->ctx == ctx) { + llist_del(&cmd->list); + cmd->ret = -ESHUTDOWN; + cmd->cb(cmd, cmd->ctx, "ERROR"); + talloc_free(cmd); + num ++; + } + + return num; +} -- cgit v1.2.3