diff options
author | petr@mysql.com <> | 2005-10-21 03:25:07 +0400 |
---|---|---|
committer | petr@mysql.com <> | 2005-10-21 03:25:07 +0400 |
commit | 9e3d89b73eaed252c5d6ecaff1a849a3a6cf88a2 (patch) | |
tree | 56ebec1a2cf1c33e5af307d1b0889ed79a03a2bb /server-tools | |
parent | efe30a1c52ba7b2da8bebc8eb90b8ac409e91a37 (diff) | |
download | mariadb-git-9e3d89b73eaed252c5d6ecaff1a849a3a6cf88a2.tar.gz |
Fix Bug#14107 (IM test failures on QNX)
(v.2 with post-review fixes)
Diffstat (limited to 'server-tools')
-rw-r--r-- | server-tools/instance-manager/instance.cc | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/server-tools/instance-manager/instance.cc b/server-tools/instance-manager/instance.cc index 945f8abe3c2..0756f0b4d9f 100644 --- a/server-tools/instance-manager/instance.cc +++ b/server-tools/instance-manager/instance.cc @@ -138,15 +138,25 @@ static int wait_process(My_process_info *pi) static int start_process(Instance_options *instance_options, My_process_info *pi) { +#ifndef __QNX__ *pi= fork(); +#else + /* + On QNX one cannot use fork() in multithreaded environment and we + should use spawn() or one of it's siblings instead. + Here we use spawnv(), which is a combination of fork() and execv() + in one call. It returns the pid of newly created process (>0) or -1 + */ + *pi= spawnv(P_NOWAIT, instance_options->mysqld_path, instance_options->argv); +#endif switch (*pi) { - case 0: + case 0: /* never happens on QNX */ execv(instance_options->mysqld_path, instance_options->argv); /* exec never returns */ exit(1); - case 1: - log_info("cannot fork() to start instance %s", + case -1: + log_info("cannot create a new process to start instance %s", instance_options->instance_name); return 1; } |