summaryrefslogtreecommitdiff
path: root/server-tools
diff options
context:
space:
mode:
authorpetr@mysql.com <>2005-10-21 03:25:07 +0400
committerpetr@mysql.com <>2005-10-21 03:25:07 +0400
commit9e3d89b73eaed252c5d6ecaff1a849a3a6cf88a2 (patch)
tree56ebec1a2cf1c33e5af307d1b0889ed79a03a2bb /server-tools
parentefe30a1c52ba7b2da8bebc8eb90b8ac409e91a37 (diff)
downloadmariadb-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.cc16
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;
}