Bug 684980

Summary: calling guestfs_kill_subprocess() then guestfs_close() causes a lockup in some applications
Product: Red Hat Enterprise Linux 6 Reporter: Angus Salkeld <asalkeld>
Component: libguestfsAssignee: Richard W.M. Jones <rjones>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 6.1CC: jzheng, leiwang, sdake
Target Milestone: rc   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: libguestfs-1.7.17-23.el6 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2011-12-06 10:31:23 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
test application
none
tentative fix for the problem
none
second patch (both needed) to fix bug. none

Description Angus Salkeld 2011-03-14 22:11:23 UTC
Created attachment 484319 [details]
test application

Description of problem:

libquestfs can call waitpid(0,..) causing it to wait on all
child processes (including processes started by the application).


Version-Release number of selected component (if applicable):


How reproducible:


Steps to Reproduce:
1. exec a process
2. start a guestfs session
3. call kill_subprocesses()
4. call 'del g_obj'
  
Actual results:
my test application blocks in a waitpid(0,..) call

Expected results:
it should not cause my application to block

Additional info:
I'll attach a test application and patch.

Comment 2 Angus Salkeld 2011-03-14 22:13:35 UTC
Created attachment 484320 [details]
tentative fix for the problem

The patch has not been tested, but looks like the solution to the problem.

Comment 3 Richard W.M. Jones 2011-03-14 22:39:16 UTC
The patch is upstream:
http://git.annexia.org/?p=libguestfs.git;a=commitdiff;h=6f7c1a9f9d76bdf9f112e12e1508531fb41abfb2
but has not been properly tested.

Comment 4 Richard W.M. Jones 2011-03-14 22:40:41 UTC
Angus, please test this and also provide some sort of easy(-ish)
test that QA can perform to verify that it is fixed in RHEL 6.2.
A small snippet of C code which fails before and succeeds after
would be ideal.

Comment 5 Angus Salkeld 2011-03-15 11:57:01 UTC
(In reply to comment #4)
> Angus, please test this and also provide some sort of easy(-ish)
> test that QA can perform to verify that it is fixed in RHEL 6.2.

Already attached is a python test case, super easy to run.
just edit and replace my iso with what ever iso you have then
if it locks up - FAIL, if it exits nicely the PASS.

> A small snippet of C code which fails before and succeeds after
> would be ideal.

I have tested and it seems I missed a "if (pid > 0)".
I will attach an extra patch that makes my test case pass.

Comment 6 Angus Salkeld 2011-03-15 11:58:06 UTC
Created attachment 484445 [details]
second patch (both needed) to fix bug.

Comment 7 Richard W.M. Jones 2011-07-12 10:13:49 UTC
For triaging purposes.  Both patches are upstream
since mid-March:

6f7c1a9f9d76bdf9f112e12e1508531fb41abfb2
d1f1f74e5f45fa5b94ebb096fa65fa33ecc23d09

Comment 8 Richard W.M. Jones 2011-08-10 11:31:47 UTC
Both patches are included in:
https://brewweb.devel.redhat.com/taskinfo?taskID=3544452

Comment 10 Jinxin Zheng 2011-08-29 07:29:21 UTC
Reproduced on libguestfs-1.7.17-19 running the forker test.

$ python forker.py 
qpidd(14137) is running
2011-08-29 11:16:28 notice SASL disabled: No Authentication Performed
2011-08-29 11:16:28 notice Listening on TCP port 49000
2011-08-29 11:16:28 notice Broker running

The program hangs here.


Verified on libguestfs-1.7.17-26 that the test could exit without hang.

$ python forker.py 
qpidd(14023) is running
2011-08-29 11:06:04 notice SASL disabled: No Authentication Performed
2011-08-29 11:06:04 notice Listening on TCP port 49000
2011-08-29 11:06:04 notice Broker running
2011-08-29 11:06:08 notice Shut down
qpidd(14023) exited with 0

Comment 11 errata-xmlrpc 2011-12-06 10:31:23 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

http://rhn.redhat.com/errata/RHBA-2011-1512.html