[Opentnl-general] Threadsafe?
Brought to you by:
mark_frohnmayer,
s_alanet
From: boB G. <bo...@sh...> - 2005-05-22 15:00:16
|
I'm fairly new to OpenTNL and am getting fairly good results so far EXCEPT that I keep seeing assertions out of netObject.cpp. Specifically the TNLAssert() on exit from NetObject::setMaskBits() fails even though the TNLAssert() at the beginning of the method with the same conditions was fine, a strong indication that the method was re-entered from another task before the first call finished. I changed the assert to an if() with debugging output with both current and "on entry" status of several pointers & dirty bits -- the exit conditions do not match what the code would do with the given entry conditions (another strong indicator of method re-entry). Looking at the code it appears that this object is very thread unsafe. Multiple methods affect a global gDirtyList without any kind of semaphore or critical section usage at all. Putting in a "poor man's semaphore" (ie a boolean and a while loop) made the code much more stable on my machine (a single CPU linux box) but was still very unstable on my co-worker's multi-CPU box (which is our eventual target platform). He was able to make the code stable on his machine by binding it to CPU 0 only. So, the question is, is OpenTNL thread-safe? If not, do I need to maintain my own thread-safe dirty list and feed it to OpenTNL from a single thread? Thanks in advance! boB Gage |