eflite (0.4.1-6) direct (non packaging) changes

Summary

 Makefile.in |    2 +-
 es.c        |    4 ++--
 fs.c        |   37 ++++++++++++++-----------------------
 3 files changed, 17 insertions(+), 26 deletions(-)

    
download this patch

Patch contents

--- eflite-0.4.1.orig/fs.c
+++ eflite-0.4.1/fs.c
@@ -9,7 +9,7 @@
  * GNU General Public License, as published by the Free Software
  * Foundation.  Please see the file COPYING for details.
  *
- * $Id: fs.c,v 1.19 2007/01/18 23:58:42 mgorse Exp $
+ * $Id: fs.c,v 1.22 2008/03/05 15:21:43 mgorse Exp $
  *
  * Notes:
  *
@@ -505,19 +505,6 @@
   }
 }
 
-
-
-static void play_audio_close(void *cancel)
-{
-  if (audiodev)
-  {
-	audio_drain(audiodev);
-	close_audiodev();
-	//	usleep(5000);
-  }
-}
-
-
 static inline void determine_playlen(int speed, cst_wave *wptr, int type, int *pl, int *s)
 {
   int playlen, skip;
@@ -573,12 +560,12 @@
 	type = ac[ac_head].type;
 	WAVE_UNLOCK;
 	pthread_testcancel();
-	pthread_cleanup_push(play_audio_close, NULL);
-
+	
 	es_log(2, "Opening audio device.");
 	/* We abuse the wave mutex here to avoid being canceled
 	 * while the audio device is being openned */
 	WAVE_LOCK;
+	assert(audiodev == NULL);
 	audiodev = audio_open(wptr->sample_rate, wptr->num_channels, CST_AUDIO_LINEAR16);
 	WAVE_UNLOCK;
 	if (audiodev == NULL)
@@ -606,8 +593,8 @@
 #ifdef DEBUG
 	  start_time = get_ticks_count();
 #endif
-	  pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
       audio_write(audiodev, wptr->samples + skip, playlen * 2);
+      pthread_testcancel();
 	  es_log(2, "Write took %.2f seconds.", get_ticks_count() - start_time);
 	}
     es_log(2, "play: syncing.");
@@ -617,16 +604,16 @@
     audio_flush(audiodev);
 	pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL);
 	es_log(2, "Flush took %.2f seconds.", get_ticks_count() - start_time);
-    es_log(2, "play: Closing audio device");
-	close_audiodev();
-	pthread_cleanup_pop(0);
-	  pthread_testcancel();
-	  TEXT_LOCK;
+    	pthread_testcancel();
+
+	TEXT_LOCK;
     time_left -= ((float)playlen) / wptr->sample_rate;
 	pthread_cond_signal(&text_condition);
 	TEXT_UNLOCK;
 
 	WAVE_LOCK;
+	es_log(2, "play: Closing audio device");
+	close_audiodev();
     ac_destroy(&ac[ac_head]);
 	ac_head++;
 	if (ac_head == ac_tail)
@@ -894,6 +881,7 @@
 	WAVE_LOCK_NI;
 	pthread_cond_signal(&wave_condition); // necessary because we inhibit cancellation while waiting
 	pthread_cancel(wave_thread);
+	if (audiodev != NULL) audio_drain(audiodev);
 	WAVE_UNLOCK_NI;
   }
 
@@ -917,7 +905,10 @@
   }
 	
   /* At this point, no thread is running */
-  
+
+  // Make sure audio device is closed
+  close_audiodev();
+
   /* Free any wave data */
   es_log(2, "s_clear: freeing wave data: %d", ac_tail);
   for (i = 0; i < ac_tail; i++)
--- eflite-0.4.1.orig/es.c
+++ eflite-0.4.1/es.c
@@ -329,7 +329,7 @@
   char *p;
 
   p = getenv("HOME");
-  sprintf(buf, "%s/.es.conf", p);
+  snprintf(buf, sizeof(buf), "%s/.es.conf", p);
   fp = fopen(buf, "r");
   if (!fp) fp = fopen("/etc/es.conf", "r");
   if (!fp) return 1;
@@ -438,7 +438,7 @@
   char logname[200];
 
   if ((flags & 0xffff) > DEBUG) return;
-  sprintf(logname, "%s/es.log", getenv("HOME"));
+  sprintf(logname, sizeof(logname), "%s/es.log", getenv("HOME"));
   va_start(arg, text);
   vsnprintf(buf, 200, text, arg);
   va_end(arg);
--- eflite-0.4.1.orig/Makefile.in
+++ eflite-0.4.1/Makefile.in
@@ -28,7 +28,7 @@
 #CFLAGS+= -DDEBUG=2
 
 # For making releases
-FLITE_LIBS:=-L$(flite_dir)/lib -lflite_$(FL_VOX) -lflite_$(FL_LEX) -lflite_$(FL_LANG) -lflite
+FLITE_LIBS:=-L$(flite_dir)/lib -lflite_$(subst cmu_us_kal16,cmu_us_kal,$(FL_VOX)) -lflite_$(FL_LEX) -lflite_$(FL_LANG) -lflite
 
 eflite: fs.o es.o soccon.o sockopen.o tone.o
 	$(CC) $(LDFLAGS) -o $@ $^ -lm $(LIBS) $(FLITE_LIBS) $(AUDIOLIBS)