Delay sending debug events until process initialization is complete.
diff --git a/loader/module.c b/loader/module.c
index 9441e03..7db93e1 100644
--- a/loader/module.c
+++ b/loader/module.c
@@ -327,6 +327,29 @@
return retval;
}
+/*************************************************************************
+ * MODULE_SendLoadDLLEvents
+ *
+ * Sends DEBUG_DLL_LOAD events for all outstanding modules.
+ *
+ * NOTE: Assumes that the process critical section is held!
+ *
+ */
+void MODULE_SendLoadDLLEvents( void )
+{
+ WINE_MODREF *wm;
+
+ for ( wm = PROCESS_Current()->modref_list; wm; wm = wm->next )
+ {
+ if ( wm->type != MODULE32_PE ) continue;
+ if ( wm == PROCESS_Current()->exe_modref ) continue;
+ if ( wm->flags & WINE_MODREF_DEBUG_EVENT_SENT ) continue;
+
+ DEBUG_SendLoadDLLEvent( -1 /*FIXME*/, wm->module, &wm->modname );
+ wm->flags |= WINE_MODREF_DEBUG_EVENT_SENT;
+ }
+}
+
/***********************************************************************
* MODULE_CreateDummyModule
@@ -1321,13 +1344,18 @@
EnterCriticalSection(&PROCESS_Current()->crit_section);
wm = MODULE_LoadLibraryExA( libname, hfile, flags );
-
- if(wm && !MODULE_DllProcessAttach(wm, NULL))
+ if ( wm )
{
- WARN_(module)("Attach failed for module '%s', \n", libname);
- MODULE_FreeLibrary(wm);
- SetLastError(ERROR_DLL_INIT_FAILED);
- wm = NULL;
+ if ( PROCESS_Current()->flags & PDB32_DEBUGGED )
+ MODULE_SendLoadDLLEvents();
+
+ if ( !MODULE_DllProcessAttach( wm, NULL ) )
+ {
+ WARN_(module)("Attach failed for module '%s', \n", libname);
+ MODULE_FreeLibrary(wm);
+ SetLastError(ERROR_DLL_INIT_FAILED);
+ wm = NULL;
+ }
}
LeaveCriticalSection(&PROCESS_Current()->crit_section);
@@ -1411,9 +1439,6 @@
LeaveCriticalSection(&PROCESS_Current()->crit_section);
- if (PROCESS_Current()->flags & PDB32_DEBUGGED)
- DEBUG_SendLoadDLLEvent( -1 /*FIXME*/, pwm->module, &pwm->modname );
-
return pwm;
}