As noted by Eric Anderson, someone might call a function that uses VERBOSE inside a VERBOSE macro. This updated patch uses a recursive
lock to prevent this case from deadlocking the application.
If someone engages in blocking inter-thread communications with another thread that also uses VERBOSE while within the VERBOSE macro this would still deadlock. But I think we would want to find any such coding monstrosities.
I've not had any deadlocks even with a the fast lock in my first thread safe verbose patch.
-- Daniel
Index: libs/libmyth/mythcontext.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmyth/mythcontext.cpp,v
retrieving revision 1.143
diff -r1.143 mythcontext.cpp
41a42
> pthread_mutex_t MythContext::verbose_lock =
> PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
Index: libs/libmyth/mythcontext.h
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmyth/mythcontext.h,v
retrieving revision 1.174
diff -r1.174 mythcontext.h
14a15
> #include <pthread.h>
84,86c85,91
< if ((print_verbose_messages & mask) != 0) \
< cout << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz") \
< << " " << args << endl; \
---
> if ((print_verbose_messages & mask) != 0) \
> {\
> pthread_mutex_lock(&MythContext::verbose_lock);\
> cout << QDateTime::currentDateTime().toString("yyyy-MM-dd
> hh:mm:ss.zzz") \
> << " " << args << endl; \
> pthread_mutex_unlock(&MythContext::verbose_lock);\
> }\
269a275,276
> static pthread_mutex_t verbose_lock; // makes verbose output more sane
>
289d295
<
_______________________________________________ mythtv-dev mailing list [email protected] http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
