commit f657ab584c92a3b15b956f2c3552a3075ee81e38
Author: Oswald Buddenhagen <[email protected]>
Date: Sun Mar 27 12:34:25 2011 +0200
centralize imap_cmd disposal
src/drv_imap.c | 31 ++++++++++++++-----------------
1 files changed, 14 insertions(+), 17 deletions(-)
diff --git a/src/drv_imap.c b/src/drv_imap.c
index b9c6035..10d5d35 100644
--- a/src/drv_imap.c
+++ b/src/drv_imap.c
@@ -199,6 +199,16 @@ new_imap_cmd( int size )
cmdp->gen.callback = cb; \
cmdp->gen.callback_aux = aux;
+static int
+done_imap_cmd( imap_store_t *ctx, struct imap_cmd *cmd, int response )
+{
+ int ret = cmd->param.done( ctx, cmd, response );
+ free( cmd->param.data );
+ free( cmd->cmd );
+ free( cmd );
+ return ret;
+}
+
static struct imap_cmd *
v_submit_imap_cmd( imap_store_t *ctx, struct imap_cmd *cmd,
const char *fmt, va_list ap )
@@ -259,10 +269,7 @@ v_submit_imap_cmd( imap_store_t *ctx, struct imap_cmd *cmd,
bail:
ctx->gen.bad_callback( ctx->gen.bad_callback_aux );
bail2:
- cmd->param.done( ctx, cmd, RESP_CANCEL );
- free( cmd->param.data );
- free( cmd->cmd );
- free( cmd );
+ done_imap_cmd( ctx, cmd, RESP_CANCEL );
return NULL;
}
@@ -286,10 +293,7 @@ cancel_submitted_imap_cmds( imap_store_t *ctx )
while ((cmd = ctx->in_progress)) {
ctx->in_progress = cmd->next;
/* don't update num_in_progress and in_progress_append - store
is dead */
- cmd->param.done( ctx, cmd, RESP_CANCEL );
- free( cmd->param.data );
- free( cmd->cmd );
- free( cmd );
+ done_imap_cmd( ctx, cmd, RESP_CANCEL );
}
}
@@ -893,11 +897,8 @@ get_cmd_result( imap_store_t *ctx, struct imap_cmd *tcmd )
resp = resp2;
if (resp == RESP_CANCEL)
ctx->gen.bad_callback(
ctx->gen.bad_callback_aux );
- if (cmdp->param.done( ctx, cmdp, resp ) < 0)
+ if (done_imap_cmd( ctx, cmdp, resp ) < 0)
resp = RESP_CANCEL;
- free( cmdp->param.data );
- free( cmdp->cmd );
- free( cmdp );
if (resp == RESP_CANCEL || !tcmd || tcmd == cmdp)
return resp;
}
@@ -913,11 +914,7 @@ get_cmd_result_p2( imap_store_t *ctx, struct imap_cmd
*cmd, int response )
struct imap_cmd *ocmd = cmdp->orig_cmd;
if (response != RESP_OK) {
- int ret = ocmd->param.done( ctx, ocmd, response );
- free( ocmd->param.data );
- free( ocmd->cmd );
- free( ocmd );
- return ret;
+ return done_imap_cmd( ctx, ocmd, response );
} else {
ctx->uidnext = 0;
ocmd->param.create = 0;
------------------------------------------------------------------------------
Xperia(TM) PLAY
It's a major breakthrough. An authentic gaming
smartphone on the nation's most reliable network.
And it wants your games.
http://p.sf.net/sfu/verizon-sfdev
_______________________________________________
isync-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/isync-devel