From e876fb6cf8cf0b79bbbb621da68396530c1f7298 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Fri, 13 Jul 2012 20:49:06 +0000 Subject: threadsafer debugging printout svn path=/trunk/externals/iem/iemnet/; revision=16155 --- iemnet.c | 35 +++++++++++++++++++++++++++++------ iemnet.h | 6 ++++-- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/iemnet.c b/iemnet.c index 048c2a2..8f3ba53 100644 --- a/iemnet.c +++ b/iemnet.c @@ -24,6 +24,10 @@ #include "iemnet.h" #include + +#include + + void iemnet__addrout(t_outlet*status_outlet, t_outlet*address_outlet, long address, unsigned short port) { @@ -133,19 +137,38 @@ void udpsend_setup(void); void udpserver_setup(void); #endif -int iemnet_debuglevel_=0; +static int iemnet_debuglevel_=0; +static pthread_mutex_t debug_mtx = PTHREAD_MUTEX_INITIALIZER; + void iemnet_debuglevel(void*x, t_float f) { + static int firsttime=1; #ifdef IEMNET_HAVE_DEBUG - iemnet_debuglevel_=(int)f; - post("iemnet: setting debuglevel to %d",iemnet_debuglevel_); + int debuglevel=(int)f; + + pthread_mutex_lock(&debug_mtx); + iemnet_debuglevel_=debuglevel; + pthread_mutex_unlock(&debug_mtx); + + post("iemnet: setting debuglevel to %d", debuglevel); #else - static int firsttime=1; if(firsttime)post("iemnet compiled without debug!"); - firsttime=0; #endif + firsttime=0; } - +int iemnet_debug(int debuglevel, const char*file, unsigned int line, const char*function) { +#ifdef IEMNET_HAVE_DEBUG + int debuglevel_=0; + pthread_mutex_lock(&debug_mtx); + debuglevel_=iemnet_debuglevel_; + pthread_mutex_unlock(&debug_mtx); + if(debuglevel_ & debuglevel) { + startpost("[%s:%d#%d] ", function, line, debuglevel); + return 1; + } +#endif + return 0; +} IEMNET_EXTERN void iemnet_setup(void) { #ifdef _MSC_VER diff --git a/iemnet.h b/iemnet.h index 4aab051..93204cf 100644 --- a/iemnet.h +++ b/iemnet.h @@ -244,13 +244,15 @@ int iemnet__register(const char*name); # define IEMNET_HAVE_DEBUG 1 #endif -extern int iemnet_debuglevel_; void iemnet_debuglevel(void*,t_float); +int iemnet_debug(int debuglevel, const char*file, unsigned int line, const char*function); #define DEBUGMETHOD(c) class_addmethod(c, (t_method)iemnet_debuglevel, gensym("debug"), A_FLOAT, 0) + + #ifdef DEBUG # undef DEBUG -# define DEBUG if(iemnet_debuglevel_&DEBUGLEVEL)startpost("[%s:%d#%d]", __FUNCTION__, __LINE__, iemnet_debuglevel_), post +# define DEBUG if(iemnet_debug(DEBUGLEVEL, __FILE__, __LINE__, __FUNCTION__))post #else static void debug_dummy(const char *format, ...) {;} # define DEBUG debug_dummy -- cgit v1.2.1