commit 27427f4f56df8166fc59d2475eee1322c7f07f87
Author: Oswald Buddenhagen <[email protected]>
Date: Sun Jul 22 17:46:54 2012 +0200
don't access free'd memory in cancel_sync()
as it happens, the 1st round *may* trash svars - if we get the
cancelation request after the slave store has already died.
src/sync.c | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/sync.c b/src/sync.c
index f4315b3..865cd67 100644
--- a/src/sync.c
+++ b/src/sync.c
@@ -403,14 +403,17 @@ cancel_sync( sync_vars_t *svars )
{
int t;
- /* the 1st round is guaranteed not to trash svars */
- for (t = 0; t < 2; t++)
+ for (t = 0; t < 2; t++) {
+ int other_state = svars->state[1-t];
if (svars->ret & SYNC_BAD(t)) {
svars->drv[t]->cancel_store( svars->ctx[t] );
cancel_done( AUX );
} else {
svars->drv[t]->cancel( svars->ctx[t], cancel_done, AUX
);
}
+ if (other_state & ST_CANCELED)
+ break;
+ }
}
static void
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
isync-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/isync-devel