Brendan Hahn wrote: > No response to my message of last week, so let me try again. It's > pretty simple: librdf_cache_set_common locks the world mutex, calls > librdf_cache_cleanup, which calls librdf_cache_delete, which locks the > world mutex. pthreads mutexes are non-recursive by default, thus > deadlock. So I can fix this by setting PTHREAD_MUTEX_RECURSIVE at init > time, but how was this supposed to work? > > Further, there's this from librdf_free_cache: LIBRDF_FREE(librdf_cache, > cache); > > #ifdef WITH_THREADS pthread_mutex_unlock(cache->world->mutex); #endif > > So I'm just not feeling confident about Redland's thread support in > general. Can anyone allay my concerns?
[oops, it seems gmane ate my first reply...] well, the thread support in redland (i'm using version 1.0.8 currently) is only for unix (pthreads); unfortunately i need it to work on win32 as well, so i've wrapped the librdf_world with a mutex. (oh, and it is indeed _the_ librdf_world; create only one instance per process, and never free it; unfortunately it does not encapsulate its dependencies very well, and freeing a librdf_world will e.g. result in freeing the global data of libxml2, which makes other users of libxml2 rather unhappy)... of course, this is ultimately awful design on libxml2's part: global variables are Evil(TM)...) regards, michael -- "Neither a man nor a crowd nor a nation can be trusted to act humanely or to think sanely under the influence of a great fear." -- Bertrand Russell _______________________________________________ redland-dev mailing list [email protected] http://lists.librdf.org/mailman/listinfo/redland-dev
