The DatabaseManager is synchronized. If any class is to communicate with the db, it does that through the DatabaseManager. The latter just provides proxy methods. I think, that should result in classes getting the instance of the DatabaseManager only when it is no longer (or not yet) used by other classes.

+ (DatabaseManager*)sharedManager {
    @synchronized(self) {
        if (sharedDatabaseManager == nil) {
            [[self alloc] init]; // assignment not done here
        }
    }
    return sharedDatabaseManager;
}

+ (id)allocWithZone:(NSZone *)zone {
    @synchronized(self) {
        if (sharedDatabaseManager == nil) {
            sharedDatabaseManager = [super allocWithZone:zone];
                        [sharedDatabaseManager initDb];
            return sharedDatabaseManager;
        }
    }
    return nil;
}


On Apr 29, 2009, at 10:52 PM, Greg Guerin wrote:

Тимофей Даньшин wrote:

In short, i get an error calling the same synchronized singleton DatabaseManager from different threads.


Are you sure your database accesses are synchronized (i.e. thread- safe)? I see nothing in the posted code that uses @synchronized or any other locking mechanism.

 -- GG

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/ok5.admin%40gmail.com

This email sent to ok5.ad...@gmail.com

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to