Sebastian Lackner : services: Hold scmdatabase lock while checking marked_for_delete.
Module: wine Branch: master Commit: 38a09f9c7bb2b29287bb24dc9cb7053ca0c5303c URL: http://source.winehq.org/git/wine.git/?a=commit;h=38a09f9c7bb2b29287bb24dc9c... Author: Sebastian Lackner <sebastian(a)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(a)fds-team.de> Signed-off-by: Alexandre Julliard <julliard(a)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)
participants (1)
-
Alexandre Julliard