Description of problem: ccm load --interactive ccm-core (or any group of packages) hangs after displaying a menu, but before giving a prompt: RPMS Installed: [jorris@goodeats jorris]$ rpm -qa |grep ccm ccm-config-libs-1.2.1-1 ccm-scripts-2.0.0.AUTO.41360-5 ccm-tools-servlet-tomcat-0.9.0.AUTO.41360-5 ccm-devel-perforce-2.0.0.AUTO.41360-5 ccm-tools-0.9.0.AUTO.41360-5 ccm-tools-servlet-resin-0.9.0.AUTO.41360-5 ccm-devel-2.0.0.AUTO.41360-5 Hitting CTRL-C to get back to a command prompt will give: [jorris@goodeats rickshaw]$ com.arsdigita.util.UncheckedWrapperException (root cause: java.io.IOException: Input/output error) at com.arsdigita.packaging.Menu.choose(Menu.java:122) at com.arsdigita.packaging.ParameterEditor.edit(ParameterEditor.java:312) at com.arsdigita.packaging.Load.run(Load.java:243) at com.arsdigita.packaging.MasterTool.main(MasterTool.java:91) Root cause: java.io.IOException: Input/output error at java.io.FileInputStream.readBytes(Native Method) at java.io.FileInputStream.read(FileInputStream.java:194) at java.io.BufferedInputStream.read1(BufferedInputStream.java:220) at java.io.BufferedInputStream.read(BufferedInputStream.java:277) at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:408) at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:450) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:182) at java.io.InputStreamReader.read(InputStreamReader.java:167) at java.io.BufferedReader.fill(BufferedReader.java:136) at java.io.BufferedReader.readLine(BufferedReader.java:299) at java.io.BufferedReader.readLine(BufferedReader.java:362) at com.arsdigita.packaging.Menu.choose(Menu.java:120) at com.arsdigita.packaging.ParameterEditor.edit(ParameterEditor.java:312) at com.arsdigita.packaging.Load.run(Load.java:243) at com.arsdigita.packaging.MasterTool.main(MasterTool.java:91)
@41374 <dgregor> the problem was that before I was forking a child process which ran ccm load --config. The parent read in the STDOUT of the child and printed it to the screen. The change I made was to just fork the child and use the waitpid() function to pause the parent until the child has exited