Sebastian Lackner : services: Hold scmdatabase lock while checking marked_for_delete.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Mar 16 11:36:40 CDT 2016
Module: wine
Branch: master
Commit: 38a09f9c7bb2b29287bb24dc9cb7053ca0c5303c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=38a09f9c7bb2b29287bb24dc9cb7053ca0c5303c
Author: Sebastian Lackner <sebastian at fds-team.de>
Date: Wed Mar 16 04:30:39 2016 +0100
services: Hold scmdatabase lock while checking marked_for_delete.
Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
programs/services/services.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/programs/services/services.c b/programs/services/services.c
index 78baaf2..9f7e889 100644
--- a/programs/services/services.c
+++ b/programs/services/services.c
@@ -456,13 +456,15 @@ struct service_entry *scmdatabase_find_service_by_displayname(struct scmdatabase
void release_service(struct service_entry *service)
{
+ struct scmdatabase *db = service->db;
+
+ scmdatabase_lock(db);
if (InterlockedDecrement(&service->ref_count) == 0 && is_marked_for_delete(service))
{
- scmdatabase_lock(service->db);
- scmdatabase_remove_service(service->db, service);
- scmdatabase_unlock(service->db);
+ scmdatabase_remove_service(db, service);
free_service_entry(service);
}
+ scmdatabase_unlock(db);
}
static DWORD scmdatabase_create(struct scmdatabase **db)
More information about the wine-cvs
mailing list