diff -ru build-tree.orig/sw-23/packet.c build-tree/sw-23/packet.c --- build-tree.orig/sw-23/packet.c 2004-01-18 00:50:51.000000000 +0100 +++ build-tree/sw-23/packet.c 2007-07-22 18:24:24.000000000 +0200 @@ -8,6 +8,7 @@ #define PAYLOAD_SAMPLES 256 #define PAYLOAD_BYTES (PAYLOAD_SAMPLES*sizeof(float32_t)) +#define INDEX_LIMIT 2147483648 typedef struct { diff -ru build-tree.orig/sw-23/recv.c build-tree/sw-23/recv.c --- build-tree.orig/sw-23/recv.c 2004-01-17 11:07:20.000000000 +0100 +++ build-tree/sw-23/recv.c 2007-07-22 18:22:40.000000000 +0200 @@ -15,19 +15,22 @@ int last_packet = -1 ; while ( 1 ) { packet_recv ( d->fd , &p , 0 ) ; - if ( p.index != last_packet + 1 && last_packet != -1 ) { - fprintf ( stderr , "jack.udp recv: out of order packet arrival (%d, %d)\n", last_packet , (int)p.index ) ; - FAILURE ; - } - if ( p.channels != d->channels ) { - fprintf ( stderr , "jack.udp recv: channel mismatch packet arrival (%d != %d)\n", p.channels , d->channels ) ; - FAILURE ; - } - int bytes_available = (int) jack_ringbuffer_write_space ( d->rb ) ; - if ( PAYLOAD_BYTES > bytes_available ) { - fprintf ( stderr , "jack.udp recv: buffer overflow (%d > %d)\n", PAYLOAD_BYTES , bytes_available ) ; + + if ( p.index != ((last_packet + 1) % INDEX_LIMIT) && last_packet != -1 ) { + fprintf ( stderr , "jack.udp recv: out of order packet arrival (%d, %d)\n", last_packet , p.index ) ; + last_packet = -1; } else { - jack_ringbuffer_write_exactly ( d->rb , (char *) p.data , (size_t) PAYLOAD_BYTES ) ; + last_packet = p.index; + if ( p.channels != d->channels ) { + fprintf ( stderr , "jack.udp recv: channel mismatch packet arrival (%d != %d)\n", p.channels , d->channels ) ; + FAILURE ; + } + int bytes_available = (int) jack_ringbuffer_write_space ( d->rb ) ; + if ( PAYLOAD_BYTES > bytes_available ) { + fprintf ( stderr , "jack.udp recv: buffer overflow (%d > %d)\n", PAYLOAD_BYTES , bytes_available ) ; + } else { + jack_ringbuffer_write_exactly ( d->rb , (char *) p.data , (size_t) PAYLOAD_BYTES ) ; + } } } return NULL; diff -ru build-tree.orig/sw-23/send.c build-tree/sw-23/send.c --- build-tree.orig/sw-23/send.c 2004-01-17 11:07:13.000000000 +0100 +++ build-tree/sw-23/send.c 2007-07-22 18:23:59.000000000 +0200 @@ -13,10 +13,11 @@ { jackudp_t *d = (jackudp_t *) PTR ; packet_t p ; - p.index = 0 ; + int last_index = 0; + while ( 1 ) { jack_ringbuffer_wait_for_read ( d->rb , PAYLOAD_BYTES , d->pipe[0] ) ; - p.index++ ; + p.index = (last_index++ % INDEX_LIMIT); p.channels = d->channels ; p.frames = PAYLOAD_SAMPLES / d->channels ; jack_ringbuffer_read_exactly ( d->rb , (char *)&(p.data) , PAYLOAD_BYTES ) ;