From 89149b4d6ccbc32e4d93b72b5bc5b215ba0dfca7 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Mon, 19 Nov 2012 02:17:31 +0000 Subject: [PATCH] experimenting with thread safety of fifo.c git-svn-id: https://svn.code.sf.net/p/freetel/code@1021 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/unittest/Makefile.am | 8 +-- codec2-dev/unittest/Makefile.in | 47 +++++++++++---- codec2-dev/unittest/t48_8.c | 2 +- codec2-dev/unittest/tfifo.c | 103 ++++++++++++++++++++++++++++++++ 4 files changed, 142 insertions(+), 18 deletions(-) create mode 100644 codec2-dev/unittest/tfifo.c diff --git a/codec2-dev/unittest/Makefile.am b/codec2-dev/unittest/Makefile.am index 152d0462..df6e3272 100644 --- a/codec2-dev/unittest/Makefile.am +++ b/codec2-dev/unittest/Makefile.am @@ -3,7 +3,7 @@ AUTOMAKE_OPTS = gnu NAME = libcodec2 AM_CPPFLAGS = $(AM_CFLAGS) -noinst_PROGRAMS = genres genlsp extract vqtrain vqtrainjnd tnlp tinterp tquant vq_train_jvm scalarlsptest tfdmdv t48_8 lspsync create_interleaver tlspsens vqtrainph genphdata genampdata polar2rect vqtrainsp tprede pre de +noinst_PROGRAMS = genres genlsp extract vqtrain vqtrainjnd tnlp tinterp tquant vq_train_jvm scalarlsptest tfdmdv t48_8 lspsync create_interleaver tlspsens vqtrainph genphdata genampdata polar2rect vqtrainsp tprede pre de tfifo genres_SOURCES = genres.c ../src/lpc.c genres_LDADD = $(lib_LTLIBRARIES) @@ -100,6 +100,6 @@ de_SOURCES = de.c ../src/lpc.c de_LDADD = $(lib_LTLIBRARIES) de_LDFLAGS = $(LIBS) -#tsrc_SOURCES = tsrc.c -#tsrc_LDADD = $(lib_LTLIBRARIES) /usr/lib/libsamplerate.so.0 -#tsrc_LDFLAGS = $(LIBS) +tfifo_SOURCES = tfifo.c ../src/fifo.c +tfifo_LDADD = $(lib_LTLIBRARIES) -lpthread +tfifo_LDFLAGS = $(LIBS) diff --git a/codec2-dev/unittest/Makefile.in b/codec2-dev/unittest/Makefile.in index aecd44d5..7ab79dcb 100644 --- a/codec2-dev/unittest/Makefile.in +++ b/codec2-dev/unittest/Makefile.in @@ -43,7 +43,7 @@ noinst_PROGRAMS = genres$(EXEEXT) genlsp$(EXEEXT) extract$(EXEEXT) \ lspsync$(EXEEXT) create_interleaver$(EXEEXT) tlspsens$(EXEEXT) \ vqtrainph$(EXEEXT) genphdata$(EXEEXT) genampdata$(EXEEXT) \ polar2rect$(EXEEXT) vqtrainsp$(EXEEXT) tprede$(EXEEXT) \ - pre$(EXEEXT) de$(EXEEXT) + pre$(EXEEXT) de$(EXEEXT) tfifo$(EXEEXT) subdir = unittest DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -103,6 +103,9 @@ am_tfdmdv_OBJECTS = tfdmdv.$(OBJEXT) fdmdv.$(OBJEXT) \ kiss_fft.$(OBJEXT) octave.$(OBJEXT) tfdmdv_OBJECTS = $(am_tfdmdv_OBJECTS) tfdmdv_DEPENDENCIES = +am_tfifo_OBJECTS = tfifo.$(OBJEXT) fifo.$(OBJEXT) +tfifo_OBJECTS = $(am_tfifo_OBJECTS) +tfifo_DEPENDENCIES = am_tinterp_OBJECTS = tinterp.$(OBJEXT) sine.$(OBJEXT) \ kiss_fft.$(OBJEXT) interp.$(OBJEXT) lpc.$(OBJEXT) \ lsp.$(OBJEXT) quantise.$(OBJEXT) $(am__objects_1) \ @@ -158,19 +161,19 @@ SOURCES = $(create_interleaver_SOURCES) $(de_SOURCES) \ $(extract_SOURCES) $(genampdata_SOURCES) $(genlsp_SOURCES) \ $(genphdata_SOURCES) $(genres_SOURCES) $(lspsync_SOURCES) \ $(polar2rect_SOURCES) $(pre_SOURCES) $(scalarlsptest_SOURCES) \ - $(t48_8_SOURCES) $(tfdmdv_SOURCES) $(tinterp_SOURCES) \ - $(tlspsens_SOURCES) $(tnlp_SOURCES) $(tprede_SOURCES) \ - $(tquant_SOURCES) $(vq_train_jvm_SOURCES) $(vqtrain_SOURCES) \ - $(vqtrainjnd_SOURCES) $(vqtrainph_SOURCES) \ + $(t48_8_SOURCES) $(tfdmdv_SOURCES) $(tfifo_SOURCES) \ + $(tinterp_SOURCES) $(tlspsens_SOURCES) $(tnlp_SOURCES) \ + $(tprede_SOURCES) $(tquant_SOURCES) $(vq_train_jvm_SOURCES) \ + $(vqtrain_SOURCES) $(vqtrainjnd_SOURCES) $(vqtrainph_SOURCES) \ $(vqtrainsp_SOURCES) DIST_SOURCES = $(create_interleaver_SOURCES) $(de_SOURCES) \ $(extract_SOURCES) $(genampdata_SOURCES) $(genlsp_SOURCES) \ $(genphdata_SOURCES) $(genres_SOURCES) $(lspsync_SOURCES) \ $(polar2rect_SOURCES) $(pre_SOURCES) $(scalarlsptest_SOURCES) \ - $(t48_8_SOURCES) $(tfdmdv_SOURCES) $(tinterp_SOURCES) \ - $(tlspsens_SOURCES) $(tnlp_SOURCES) $(tprede_SOURCES) \ - $(tquant_SOURCES) $(vq_train_jvm_SOURCES) $(vqtrain_SOURCES) \ - $(vqtrainjnd_SOURCES) $(vqtrainph_SOURCES) \ + $(t48_8_SOURCES) $(tfdmdv_SOURCES) $(tfifo_SOURCES) \ + $(tinterp_SOURCES) $(tlspsens_SOURCES) $(tnlp_SOURCES) \ + $(tprede_SOURCES) $(tquant_SOURCES) $(vq_train_jvm_SOURCES) \ + $(vqtrain_SOURCES) $(vqtrainjnd_SOURCES) $(vqtrainph_SOURCES) \ $(vqtrainsp_SOURCES) ETAGS = etags CTAGS = ctags @@ -355,6 +358,9 @@ pre_LDFLAGS = $(LIBS) de_SOURCES = de.c ../src/lpc.c de_LDADD = $(lib_LTLIBRARIES) de_LDFLAGS = $(LIBS) +tfifo_SOURCES = tfifo.c ../src/fifo.c +tfifo_LDADD = $(lib_LTLIBRARIES) -lpthread +tfifo_LDFLAGS = $(LIBS) all: all-am .SUFFIXES: @@ -434,6 +440,9 @@ t48_8$(EXEEXT): $(t48_8_OBJECTS) $(t48_8_DEPENDENCIES) tfdmdv$(EXEEXT): $(tfdmdv_OBJECTS) $(tfdmdv_DEPENDENCIES) @rm -f tfdmdv$(EXEEXT) $(LINK) $(tfdmdv_LDFLAGS) $(tfdmdv_OBJECTS) $(tfdmdv_LDADD) $(LIBS) +tfifo$(EXEEXT): $(tfifo_OBJECTS) $(tfifo_DEPENDENCIES) + @rm -f tfifo$(EXEEXT) + $(LINK) $(tfifo_LDFLAGS) $(tfifo_OBJECTS) $(tfifo_LDADD) $(LIBS) tinterp$(EXEEXT): $(tinterp_OBJECTS) $(tinterp_DEPENDENCIES) @rm -f tinterp$(EXEEXT) $(LINK) $(tinterp_LDFLAGS) $(tinterp_OBJECTS) $(tinterp_LDADD) $(LIBS) @@ -485,6 +494,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dump.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extract.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdmdv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fifo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genampdata.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genlsp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genphdata.Po@am__quote@ @@ -506,6 +516,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sine.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t48_8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tfdmdv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tfifo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tinterp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlspsens.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tnlp.Po@am__quote@ @@ -846,6 +857,20 @@ octave.obj: ../src/octave.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o octave.obj `if test -f '../src/octave.c'; then $(CYGPATH_W) '../src/octave.c'; else $(CYGPATH_W) '$(srcdir)/../src/octave.c'; fi` +fifo.o: ../src/fifo.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fifo.o -MD -MP -MF "$(DEPDIR)/fifo.Tpo" -c -o fifo.o `test -f '../src/fifo.c' || echo '$(srcdir)/'`../src/fifo.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fifo.Tpo" "$(DEPDIR)/fifo.Po"; else rm -f "$(DEPDIR)/fifo.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../src/fifo.c' object='fifo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fifo.o `test -f '../src/fifo.c' || echo '$(srcdir)/'`../src/fifo.c + +fifo.obj: ../src/fifo.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fifo.obj -MD -MP -MF "$(DEPDIR)/fifo.Tpo" -c -o fifo.obj `if test -f '../src/fifo.c'; then $(CYGPATH_W) '../src/fifo.c'; else $(CYGPATH_W) '$(srcdir)/../src/fifo.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fifo.Tpo" "$(DEPDIR)/fifo.Po"; else rm -f "$(DEPDIR)/fifo.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../src/fifo.c' object='fifo.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fifo.obj `if test -f '../src/fifo.c'; then $(CYGPATH_W) '../src/fifo.c'; else $(CYGPATH_W) '$(srcdir)/../src/fifo.c'; fi` + mostlyclean-libtool: -rm -f *.lo @@ -1022,10 +1047,6 @@ uninstall-am: uninstall-info-am pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-info-am - -#tsrc_SOURCES = tsrc.c -#tsrc_LDADD = $(lib_LTLIBRARIES) /usr/lib/libsamplerate.so.0 -#tsrc_LDFLAGS = $(LIBS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/codec2-dev/unittest/t48_8.c b/codec2-dev/unittest/t48_8.c index 04c79b56..1eff979b 100644 --- a/codec2-dev/unittest/t48_8.c +++ b/codec2-dev/unittest/t48_8.c @@ -43,7 +43,7 @@ int main() { FILE *f8; int i,f,t,t1; - float freq = 505.0; + float freq = 800.0; f48 = fopen("out48.raw", "wb"); assert(f48 != NULL); diff --git a/codec2-dev/unittest/tfifo.c b/codec2-dev/unittest/tfifo.c new file mode 100644 index 00000000..d7c64c72 --- /dev/null +++ b/codec2-dev/unittest/tfifo.c @@ -0,0 +1,103 @@ +/* + tfifo.c + David Rowe + Nov 19 2012 + + Takes FIFOs, in particular thread safety. +*/ + +#include +#include +#include +#include "fifo.h" + +#define FIFO_SZ 1024 +#define WRITE_SZ 10 +#define READ_SZ 8 +#define N_MAX 100 +#define LOOPS 10000 + +int run_thread = 1; +struct FIFO *f; + +void writer(void); +void *writer_thread(void *data); +pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + +#define USE_THREADS +#define USE_MUTEX + +int main() { + pthread_t awriter_thread; + int i,j; + short read_buf[READ_SZ]; + int n_out = 0; + int sucess; + + f = fifo_create(FIFO_SZ); + #ifdef USE_THREADS + pthread_create(&awriter_thread, NULL, writer_thread, NULL); + #endif + + for(i=0; i WRITE_SZ) { + for(i=0; i