Hi,

Have a couple of questions wrt QPID-7926

Question 1: what is the relevance of the is_pod<> result?

JIRA- 7926 (https://issues.apache.org/jira/browse/QPID-7926) states that:
"In a stand-alone windows program
std::is_pod<PODMutex>::value
returns false. In Linux the same statement in qpidd broker returns true."

If I execute:
grep -r is_pod
in qpid-cpp-1.38.0 directory I get nothing i.e. from what I can see the
broker never uses "is_pod".  What am I missing?

Question 2: Is this a possible approach?
I find 3 non-comment lines using QPID_MUTEX_INITIALIZER:
src/qpid/sys/posix/Mutex.h:#define QPID_MUTEX_INITIALIZER {
PTHREAD_MUTEX_INITIALIZER }
src/qpid/sys/windows/Mutex.h:#define QPID_MUTEX_INITIALIZER 0
src/qpid/log/Logger.cpp:sys::PODMutex loggerLock = QPID_MUTEX_INITIALIZER;

Where the last line is generating the compiler error under windows, due to
the type mismatch.

For windows PODMutex, is a thin wrapper around boost::recusive_mutex, while
under linux PODMutex is wrapper around pthread_mutex_t.

>From what I can see boost::recusive_mutex does not need to be initalised,
but pthread_mutex_t does, hence under windows+boost the initialisation on
the line:
sys::PODMutex loggerLock = QPID_MUTEX_INITIALIZER;
is not required.  So possibly src/qpid/log/Logger.cpp can become:
#if defined(BOOST_WINDOWS)
sys::PODMutex loggerLock;
#else
sys::PODMutex loggerLock = QPID_MUTEX_INITIALIZER;
#endif

Kind regards
Michael

Reply via email to