summaryrefslogtreecommitdiffstats
path: root/3rdparty/openpgm-svn-r1135-0001-sigsegv-in-txw.patch
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/openpgm-svn-r1135-0001-sigsegv-in-txw.patch')
-rw-r--r--3rdparty/openpgm-svn-r1135-0001-sigsegv-in-txw.patch28
1 files changed, 28 insertions, 0 deletions
diff --git a/3rdparty/openpgm-svn-r1135-0001-sigsegv-in-txw.patch b/3rdparty/openpgm-svn-r1135-0001-sigsegv-in-txw.patch
new file mode 100644
index 0000000..af6d4fd
--- /dev/null
+++ b/3rdparty/openpgm-svn-r1135-0001-sigsegv-in-txw.patch
@@ -0,0 +1,28 @@
+Problem: OpenPGM generates a SIGSEGV upon accessing peer->sock->use_pgmcc.
+ This is because the code assumes that the queue list entry comes first
+ in the definition of struct pgm_peer_t, which it does not (anymore?).
+
+diff -Naur openpgm-r1135-pristine/pgm/receiver.c openpgm-svn-r1135/pgm/receiver.c
+--- openpgm-r1135-pristine/pgm/receiver.c 2010-09-06 20:41:52.000000000 +0200
++++ openpgm-svn-r1135/pgm/receiver.c 2010-09-24 12:40:07.000000000 +0200
+@@ -71,7 +71,9 @@
+ pgm_assert (NULL != window);
+ pgm_assert (NULL != window->ack_backoff_queue.tail);
+
+- const struct pgm_peer_t* peer = (const struct pgm_peer_t*)window->ack_backoff_queue.tail;
++ const struct pgm_peer_t* peer = (const struct pgm_peer_t*)window->ack_backoff_queue.tail->data;
++ pgm_assert (NULL != peer);
++
+ pgm_assert (peer->sock->use_pgmcc);
+ return peer->ack_rb_expiry;
+ }
+@@ -416,6 +418,9 @@
+ sock->ack_c_p);
+ peer->spmr_expiry = now + sock->spmr_expiry;
+
++/* Prepare ack_link */
++ peer->ack_link.data = peer;
++
+ /* add peer to hash table and linked list */
+ pgm_rwlock_writer_lock (&sock->peers_lock);
+ pgm_peer_t* entry = _pgm_peer_ref (peer);