Hello Gerrit,

On 14.08.2010 00:19, Gerrit Voß wrote:
> On Fri, 2010-08-13 at 17:40 -0500, Carsten Neumann wrote:
>> we've run into a problem with our app that runs multiple threads on one
>> aspect when connecting it to a cluster server.
>> Consider the following scenario:
>>
>> Thread A:
>> - changes field F0 in container C
>> in FC::registerChangedContainer _pContainerChanges points to an entry in
>> the CL of Thread A.
>> - commitChanges();
>>
>> Thread B:
>> - changes field F1 in container C
>> because of the commitChanges _bvChanges == 0x00
>> so FC::registerChangedContainer runs, but only puts an uncommitted
>> change for F1 into the CL of Thread B.
>> - commitChanges();
>>
>> The change to F1 will not be transmitted over the cluster, because it is
>> lost after the commitChanges clears the uncommitedChanges list of the CL
>> of Thread B.
>
> hmm, the thing missing is how and when do you set up the change list
> for the cluster sync ??

the app never uses commitChanges directly, but instead we have a guard 
object that in its d'tor commits, merges the current thread CL to a 
global CL and clears the thread CL. The global CL is created on first 
use and it is transmitted over the cluster.

> Which relates to how are A and B excluded from
> each other, e.g. how fine grained is the locking so that they do not
> write the same container ?

it's the apps problem to avoid that, I think we get it right. The 
accesses we were having trouble with were at different points in time.

>> Attached is a patch that changes the behaviour of
>> FC::registerChangedContainer() to only skip creation of a new CL entry
>> if _pContainerChanges points into the current thread's CL.
>>
>> Comments? Other ideas to solve this?
>
> if possible I would like to avoid the round trip through the thread.

it has always gone through the thread to add the uncommitted entry at 
the end, so there should be no *new* TLS access with the patch.

        Cheers,
                Carsten

------------------------------------------------------------------------------
This SF.net email is sponsored by 

Make an app they can't live without
Enter the BlackBerry Developer Challenge
http://p.sf.net/sfu/RIM-dev2dev 
_______________________________________________
Opensg-core mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-core

Reply via email to