From: Zebediah Figura Subject: [PATCH 6/6] winegstreamer: Do not pin winegstreamer.dll. Message-Id: <20210223220704.478035-6-z.figura12@gmail.com> Date: Tue, 23 Feb 2021 16:07:04 -0600 In-Reply-To: <20210223220704.478035-1-z.figura12@gmail.com> References: <20210223220704.478035-1-z.figura12@gmail.com> It's not clear what atexit handlers glib installs or why they cause problems. In fact, current glib source, besides including some wrapper API, has only one call to atexit(), which simply dumps leaked objects. In any case, keeping this code around does not seem worthwhile when the problem is not fully understood and may not exist anymore at all. Signed-off-by: Zebediah Figura --- dlls/winegstreamer/gst_private.h | 2 -- dlls/winegstreamer/main.c | 26 -------------------------- dlls/winegstreamer/quartz_parser.c | 19 ------------------- 3 files changed, 47 deletions(-) diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 55a62361966..49b14316ea8 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -205,8 +205,6 @@ HRESULT decodebin_parser_create(IUnknown *outer, IUnknown **out) DECLSPEC_HIDDEN HRESULT mpeg_splitter_create(IUnknown *outer, IUnknown **out) DECLSPEC_HIDDEN; HRESULT wave_parser_create(IUnknown *outer, IUnknown **out) DECLSPEC_HIDDEN; -BOOL init_gstreamer(void) DECLSPEC_HIDDEN; - void start_dispatch_thread(void) DECLSPEC_HIDDEN; extern HRESULT mfplat_get_class_object(REFCLSID rclsid, REFIID riid, void **obj) DECLSPEC_HIDDEN; diff --git a/dlls/winegstreamer/main.c b/dlls/winegstreamer/main.c index d5c06bf3279..8e36b71ab12 100644 --- a/dlls/winegstreamer/main.c +++ b/dlls/winegstreamer/main.c @@ -139,9 +139,6 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out) TRACE("clsid %s, iid %s, out %p.\n", debugstr_guid(clsid), debugstr_guid(iid), out); - if (!init_gstreamer()) - return CLASS_E_CLASSNOTAVAILABLE; - if (SUCCEEDED(hr = mfplat_get_class_object(clsid, iid, out))) return hr; @@ -162,29 +159,6 @@ HRESULT WINAPI DllGetClassObject(REFCLSID clsid, REFIID iid, void **out) return IClassFactory_QueryInterface(&factory->IClassFactory_iface, iid, out); } -static BOOL CALLBACK init_gstreamer_proc(INIT_ONCE *once, void *param, void **ctx) -{ - HINSTANCE handle; - - /* Unloading glib is a bad idea.. it installs atexit handlers, - * so never unload the dll after loading */ - GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_PIN, - (LPCWSTR)winegstreamer_instance, &handle); - if (!handle) - ERR("Failed to pin module %p.\n", winegstreamer_instance); - - return TRUE; -} - -BOOL init_gstreamer(void) -{ - static INIT_ONCE once = INIT_ONCE_STATIC_INIT; - - InitOnceExecuteOnce(&once, init_gstreamer_proc, NULL, NULL); - - return TRUE; -} - static const REGPINTYPES reg_audio_mt = {&MEDIATYPE_Audio, &GUID_NULL}; static const REGPINTYPES reg_stream_mt = {&MEDIATYPE_Stream, &GUID_NULL}; static const REGPINTYPES reg_video_mt = {&MEDIATYPE_Video, &GUID_NULL}; diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c index e9e7c3a0f9f..fd1a1e82481 100644 --- a/dlls/winegstreamer/quartz_parser.c +++ b/dlls/winegstreamer/quartz_parser.c @@ -1077,20 +1077,10 @@ static HRESULT decodebin_parser_source_get_media_type(struct parser_source *pin, return VFW_S_NO_MORE_ITEMS; } -static BOOL parser_init_gstreamer(void) -{ - if (!init_gstreamer()) - return FALSE; - return TRUE; -} - HRESULT decodebin_parser_create(IUnknown *outer, IUnknown **out) { struct parser *object; - if (!parser_init_gstreamer()) - return E_FAIL; - if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; @@ -1619,9 +1609,6 @@ HRESULT wave_parser_create(IUnknown *outer, IUnknown **out) { struct parser *object; - if (!parser_init_gstreamer()) - return E_FAIL; - if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; @@ -1705,9 +1692,6 @@ HRESULT avi_splitter_create(IUnknown *outer, IUnknown **out) { struct parser *object; - if (!parser_init_gstreamer()) - return E_FAIL; - if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; @@ -1812,9 +1796,6 @@ HRESULT mpeg_splitter_create(IUnknown *outer, IUnknown **out) { struct parser *object; - if (!parser_init_gstreamer()) - return E_FAIL; - if (!(object = calloc(1, sizeof(*object)))) return E_OUTOFMEMORY; -- 2.30.1