qtest: don't use system command to avoid double fork
Currently we waitpid on the child process we spawn off that does nothing more than system() another process. While this does not appear to be incorrect, it's wasteful and confusing so get rid of it. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> Message-id: 1366123521-4330-2-git-send-email-aliguori@us.ibm.com
This commit is contained in:
		
							parent
							
								
									4aead69241
								
							
						
					
					
						commit
						8a8fd63734
					
				@ -107,7 +107,7 @@ static pid_t qtest_qemu_pid(QTestState *s)
 | 
				
			|||||||
QTestState *qtest_init(const char *extra_args)
 | 
					QTestState *qtest_init(const char *extra_args)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QTestState *s;
 | 
					    QTestState *s;
 | 
				
			||||||
    int sock, qmpsock, ret, i;
 | 
					    int sock, qmpsock, i;
 | 
				
			||||||
    gchar *pid_file;
 | 
					    gchar *pid_file;
 | 
				
			||||||
    gchar *command;
 | 
					    gchar *command;
 | 
				
			||||||
    const char *qemu_binary;
 | 
					    const char *qemu_binary;
 | 
				
			||||||
@ -136,10 +136,8 @@ QTestState *qtest_init(const char *extra_args)
 | 
				
			|||||||
                                  "%s", qemu_binary, s->socket_path,
 | 
					                                  "%s", qemu_binary, s->socket_path,
 | 
				
			||||||
                                  s->qmp_socket_path, pid_file,
 | 
					                                  s->qmp_socket_path, pid_file,
 | 
				
			||||||
                                  extra_args ?: "");
 | 
					                                  extra_args ?: "");
 | 
				
			||||||
 | 
					        execlp("/bin/sh", "sh", "-c", command, NULL);
 | 
				
			||||||
        ret = system(command);
 | 
					        exit(1);
 | 
				
			||||||
        exit(ret);
 | 
					 | 
				
			||||||
        g_free(command);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    s->fd = socket_accept(sock);
 | 
					    s->fd = socket_accept(sock);
 | 
				
			||||||
@ -169,9 +167,8 @@ void qtest_quit(QTestState *s)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    pid_t pid = qtest_qemu_pid(s);
 | 
					    pid_t pid = qtest_qemu_pid(s);
 | 
				
			||||||
    if (pid != -1) {
 | 
					    if (pid != -1) {
 | 
				
			||||||
        /* kill QEMU, but wait for the child created by us to run system() */
 | 
					 | 
				
			||||||
        kill(pid, SIGTERM);
 | 
					        kill(pid, SIGTERM);
 | 
				
			||||||
        waitpid(s->child_pid, &status, 0);
 | 
					        waitpid(pid, &status, 0);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    unlink(s->pid_file);
 | 
					    unlink(s->pid_file);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user