diff -Naur mbuffer-20010518/CHANGES mbuffer-20010528/CHANGES --- mbuffer-20010518/CHANGES Fri May 18 10:19:16 2001 +++ mbuffer-20010528/CHANGES Mon May 28 15:24:19 2001 @@ -1,3 +1,8 @@ +20010528: +- semantic fix for option -p to be consistend with buffer +- bugfix: for dropped blocks in multi-volumen code +- fix for lockup if SIG_BRK is sent during a volume request + 20010518: - Bugfix: multi volume output now should work (bugreport by Dan Hollis) diff -Naur mbuffer-20010518/Makefile.in mbuffer-20010528/Makefile.in --- mbuffer-20010518/Makefile.in Fri May 18 09:54:11 2001 +++ mbuffer-20010528/Makefile.in Mon May 28 15:24:19 2001 @@ -20,7 +20,7 @@ $(CC) $(LDFLAGS) $(LIBS) $< -o $@ clean: - $(RM) -f *.o + $(RM) -f *.o core distclean: clean $(RM) -f $(TARGET) config.h config.cache config.log \ diff -Naur mbuffer-20010518/configure mbuffer-20010528/configure --- mbuffer-20010518/configure Fri May 18 09:53:05 2001 +++ mbuffer-20010528/configure Mon May 28 15:24:19 2001 @@ -643,7 +643,7 @@ PACKAGE=mbuffer -VERSION=20010518 +VERSION=20010528 cat >> confdefs.h <= Start) { + sem_getvalue(&Percentage,&perc); + if (!perc) { + infomsg("\ninputThread: percentage reached - restarting output...\n"); + sem_post(&Percentage); + } + } at++; if (at == Numblocks) at = 0; Numin++; } + sem_post(&Percentage); infomsg("inputThread: exiting..."); } @@ -257,22 +268,18 @@ { int at = 0, err, fill, num, rest; - if (Start) { - infomsg("outputThread: waiting for buffer...\n"); - do { - usleep(100000); - sem_getvalue(&Buf2Dev,&fill); - } while (((float) fill / (float) Numblocks) < Start); - } - fill = -1; infomsg("\noutputThread: starting...\n"); + pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,0); while (1) { debugmsg("outputThread: wait\n"); + sem_getvalue(&Buf2Dev,&fill); + if (Start && (!fill)) + sem_wait(&Percentage); sem_wait(&Buf2Dev); num = 0; if (Finish) { - sem_getvalue(&Buf2Dev,&fill); debugmsg("outputThread: inputThread finished, %i blocks remaining\n",fill); + sem_getvalue(&Buf2Dev,&fill); if ((0 == Rest) && (0 == fill)) { infomsg("outputThread: finished - exiting...\n"); pthread_exit((void *) 0); @@ -284,7 +291,7 @@ rest = Blocksize; do { debugmsg("outputThread: write %i\n",-num); - err = write(Out,Buffer[at++] + num, Outsize > rest ? Outsize : rest ); + err = write(Out,Buffer[at] + num, Outsize > rest ? Outsize : rest ); #ifdef EXPERIMENTAL if ((-1 == err) && (Terminal) && ((errno == ENOMEM) || (errno == ENOSPC))) { requestOutputVolume(); @@ -301,6 +308,7 @@ if (Pause) usleep(Pause); } while (rest > 0); + at++; if (Finish && (0 == fill)) { infomsg("syncing...\n"); fsync(Out); @@ -526,6 +534,8 @@ if (0 != sem_init(&Buf2Dev,0,0)) fatal("Error creating semaphore: %s\n",strerror(errno)); if (0 != sem_init(&Dev2Buf,0,Numblocks)) + fatal("Error creating semaphore: %s\n",strerror(errno)); + if (0 != sem_init(&Percentage,0,0)) fatal("Error creating semaphore: %s\n",strerror(errno)); debugmsg("opening streams...\n");