pluginloader-win32: Check pipe state in child process

Retry if server is not ready for the connection

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3863>
This commit is contained in:
Seungha Yang 2023-02-02 00:19:55 +09:00 committed by GStreamer Marge Bot
parent 0df7cd852c
commit 464a8be3a4

View file

@ -1152,12 +1152,26 @@ _gst_plugin_loader_client_run (const gchar * pipe_name)
GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, NULL);
loader.last_err = GetLastError ();
if (loader.pipe == INVALID_HANDLE_VALUE) {
/* Server should be pending (waiting for connection) state already,
* but do retry if it's not the case */
if (loader.last_err == ERROR_PIPE_BUSY) {
if (WaitNamedPipeA (pipe_name, 5000)) {
loader.pipe = CreateFileA (pipe_name,
GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, NULL);
}
loader.last_err = GetLastError ();
}
if (loader.pipe == INVALID_HANDLE_VALUE) {
err = g_win32_error_message (loader.last_err);
GST_ERROR ("CreateFileA failed with 0x%x (%s)",
loader.last_err, GST_STR_NULL (err));
goto out;
}
}
/* We use message mode */
if (!SetNamedPipeHandleState (loader.pipe, &pipe_mode, NULL, NULL)) {