On sábado, 26 de janeiro de 2013 11.38.58, Guido Seifert wrote:
> The program runs for hrs and the code seems to be ok. Most of the time. But
> in my logs I see, that from time to time I get an error. The shared memory
> cannot be created, because it already exists. I can live with it, but it
> looks unclean to me. Could it be that there exists a race condition between
> the last detach() and a create()?

Yes. The QSharedMemory code is really racy. If you attach and detach, create
and attempt to destroy, it's quite easy to get the QSharedMemory code to fail.

See
http://qt.gitorious.org/qt/qtbase/commit/60fc88a09c0127bf79563e5449e049f3c9e0fc55

You'll note two things:
 1) the race condition begins with QSystemSemaphore
 2) the commit doesn't fix the race condition, it only works around it
 3) the code was actually entering into a deadlock

Unfortunately, I don't know how to fix the problem. I'd probably have to
rewrite both classes with different semantics to make it work.

> Maybe it would be nice to have a signal, which tells, when a segment really
> is destroyed? OR course, if such a signal is even possible.

Since any segment can be recreated, it's not easy to do that.

--
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
Interest mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to