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);