La documentación de Microsoft no dice nada sobre lo que sucede si, por error, llamo al ReleaseMutex()
cuando el mutex ya está desbloqueado.¿Qué sucede si lanzo ReleaseMutex() dos veces?
Detalles:
estoy tratando de arreglar un poco de código de Windows sin tener acceso al compilador.
Me doy cuenta de que los mutexes de WinApi son recursivos y cuentan con referencias. Si estuviera haciendo uso de esa característica, es obvio que la llamada extra ReleaseMutex()
disminuiría prematuramente el contador de referencia.
Sin embargo, el código que estoy viendo no utiliza el mutex recursivamente, por lo que el recuento de referencias nunca supera el '1'. Es hace liberar el mutex más veces de las necesarias ... entonces, ¿qué ocurre? ¿El recuento de referencias es negativo? ¿Permanece en cero (desbloqueado) y simplemente devuelve un error ignorable?
(Naturalmente, este código no tiene realmente comprobar si hay errores cuando se llama a estas funciones!)
Esta es una muy mala pregunta. Incluso si supiera, 'verifica bajo WinXP' podría ser completamente diferente en Win7. Entonces realmente nunca deberías hacer esto. (NB: Creo que está marcado) – Christopher
La documentación no es silenciosa: http://msdn.microsoft.com/en-us/library/ms685066%28VS.85%29.aspx – peejaybee
peejaybee, debe actualizar eso comentar a una respuesta! –