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