Dokumentacja Microsoft nie mówi nic o tym, co się stanie, jeśli błędnie zadzwonię pod ReleaseMutex()
, gdy muteks jest już odblokowany.Co się stanie, jeśli dwukrotnie zwolnię funkcję ReleaseMutex()?
Szczegóły:
Próbuję naprawić jakiś kod systemu Windows, bez konieczności dostępu do kompilatora.
Zdaję sobie sprawę, że muteksy WinApi są rekursywne i liczone w odwołaniach. Jeśli korzystałem z tej funkcji, oczywiste jest, że dodatkowe wywołanie ReleaseMutex()
przedwcześnie zmniejszy licznik odwołań.
Jednak kod, na który patrzę, nie używa rekursywnie muteksa, więc liczba referencyjna nigdy nie jest wyższa niż "1". To ma zwolnić mutex więcej razy niż to konieczne ... więc co się dzieje? Czy licznik odniesień jest ujemny? Czy pozostanie na zero (odblokowany) i po prostu zwróci niezrozumiały błąd?
(Naturalnie, ten kod nie faktycznie sprawdzić błędy podczas wywołuje te funkcje!)
To jest naprawdę złe pytanie. Nawet gdybym wiedział, "sprawdza pod WinXP", może to wyglądać zupełnie inaczej w Win7. Więc nigdy nie powinieneś tego robić. (UWAGA: Myślę, że jest zaznaczone) – Christopher
Dokumentacja nie jest cicha: http://msdn.microsoft.com/en-us/library/ms685066%28VS.85%29.aspx – peejaybee
peejaybee, powinieneś uaktualnić to skomentuj odpowiedź! –