blob: af6d4fdc2e5d6c655d38f8ce527054a416df8d41 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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);
|