Skip to content

Commit

Permalink
MDEV-23279 main.named_pipe test timeouts if called twice in a row
Browse files Browse the repository at this point in the history
The test timeouts, because mtr is waiting for pid file.
The pid file is not there, because expected to fail mysqld startup
(duplicate named pipe name), this startup removed pid file of the running
mysqld instance.

To fix, split handle_connections_win() into the initialization part,
and  accept/handle part, like it is done elsewhere.

The initialization part runs before pid file handling, and aborts on errors
, thus avoiding pid file overwrites.
  • Loading branch information
vaintroub committed Aug 10, 2020
1 parent 5611df6 commit 4ea915e
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 7 deletions.
1 change: 1 addition & 0 deletions mysql-test/main/named_pipe.test
Expand Up @@ -27,3 +27,4 @@ let $MYSQLD_DATADIR= `select @@datadir`;
let SEARCH_FILE=$MYSQLD_DATADIR/second-mysqld.err;
let SEARCH_PATTERN=\[ERROR\] Create named pipe failed;
source include/search_pattern_in_file.inc;
remove_file $SEARCH_FILE;
20 changes: 13 additions & 7 deletions sql/handle_connections_win.cc
Expand Up @@ -482,13 +482,13 @@ struct Pipe_Listener : public Listener
#define SHUTDOWN_IDX 0
#define LISTENER_START_IDX 1

void handle_connections_win()
{
Listener* all_listeners[MAX_WAIT_HANDLES]= {};
HANDLE wait_events[MAX_WAIT_HANDLES]= {};
int n_listeners= 0;
int n_waits= 0;
static Listener *all_listeners[MAX_WAIT_HANDLES];
static HANDLE wait_events[MAX_WAIT_HANDLES];
static int n_listeners;
static int n_waits;

void network_init_win()
{
Socket_Listener::init_winsock_extensions();

/* Listen for TCP connections on "extra-port" (no threadpool).*/
Expand Down Expand Up @@ -518,7 +518,6 @@ void handle_connections_win()
unireg_abort(1);
}

wait_events[SHUTDOWN_IDX]= hEventShutdown;
n_waits = 1;

for (int i= 0; i < n_listeners; i++)
Expand All @@ -531,7 +530,14 @@ void handle_connections_win()
}
all_listeners[i]->begin_accept();
}
}

void handle_connections_win()
{
DBUG_ASSERT(hEventShutdown);
DBUG_ASSERT(n_waits);

wait_events[SHUTDOWN_IDX]= hEventShutdown;
for (;;)
{
DWORD idx = WaitForMultipleObjects(n_waits ,wait_events, FALSE, INFINITE);
Expand Down
1 change: 1 addition & 0 deletions sql/handle_connections_win.h
Expand Up @@ -18,3 +18,4 @@
Creates new (THD) connections..
*/
extern void handle_connections_win();
extern void network_init_win();
5 changes: 5 additions & 0 deletions sql/mysqld.cc
Expand Up @@ -2526,6 +2526,11 @@ static void network_init(void)
#endif
}
#endif

#ifdef _WIN32
network_init_win();
#endif

DBUG_PRINT("info",("server started"));
DBUG_VOID_RETURN;
}
Expand Down

0 comments on commit 4ea915e

Please sign in to comment.