commit 5e5c7fb50866be4a744642c225205039bb306b88 Author: Oswald Buddenhagen <o...@users.sf.net> Date: Sun Jun 19 11:19:34 2022 +0200
free IMAP command's payload prior to invoking its completion callback otherwise the synching may livelock due to failing to schedule follow-up commands, thinking the buffers are still full. of course, this is relevant only for commands that failed early and thus didn't free the payload right after submission already - which will be possible only after the next commit. src/drv_imap.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/drv_imap.c b/src/drv_imap.c index 3dc8c53e..ee72548f 100644 --- a/src/drv_imap.c +++ b/src/drv_imap.c @@ -288,11 +288,13 @@ done_imap_cmd( imap_store_t *ctx, imap_cmd_t *cmd, int response ) { if (cmd->param.wait_check) ctx->num_wait_check--; - cmd->param.done( ctx, cmd, response ); if (cmd->param.data) { free( cmd->param.data ); + cmd->param.data = NULL; + // This needs to happen before calling back. ctx->buffer_mem -= cmd->param.data_len; } + cmd->param.done( ctx, cmd, response ); free( cmd->cmd ); free( cmd ); } _______________________________________________ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel