From 77cd21e7c29cac23373c3963126b58a176930fe1 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Mon, 1 Aug 2016 09:24:39 +0200 Subject: [PATCH] C-Netz: Fix transaction list corruption --- src/cnetz/transaction.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cnetz/transaction.c b/src/cnetz/transaction.c index c8bf884..7c9ca03 100644 --- a/src/cnetz/transaction.c +++ b/src/cnetz/transaction.c @@ -101,7 +101,9 @@ void link_transaction(transaction_t *trans, cnetz_t *cnetz) transaction_t **transp; /* attach to end of list, so first transaction is served first */ + PDEBUG(DTRANS, DEBUG_DEBUG, "Linking transaction %p to cnetz %p\n", trans, cnetz); trans->cnetz = cnetz; + trans->next = NULL; transp = &cnetz->trans_list; while (*transp) transp = &((*transp)->next); @@ -114,6 +116,7 @@ void unlink_transaction(transaction_t *trans) transaction_t **transp; /* unlink */ + PDEBUG(DTRANS, DEBUG_DEBUG, "Unlinking transaction %p from cnetz %p\n", trans, trans->cnetz); transp = &trans->cnetz->trans_list; while (*transp && *transp != trans) transp = &((*transp)->next); @@ -214,7 +217,7 @@ void cnetz_flush_other_transactions(cnetz_t *cnetz, transaction_t *trans) /* flush after this very trans */ while (trans->next) { PDEBUG(DTRANS, DEBUG_NOTICE, "Kicking other pending transaction\n"); - destroy_transaction(trans); + destroy_transaction(trans->next); } /* flush before this very trans */ while (cnetz->trans_list != trans) {