-----Original
Message-----
From: James
Langley [mailto:jlangley@xxxxxxxxxx]
Sent: Friday, July 23,
2004 10:57
AM
To:
cdt-core-dev@xxxxxxxxxxx
Subject: [cdt-core-dev] Problem
cancelling a launch
Hi,
I’m having some problems with
process termination under CDT that I hope someone can help with. This might be a candidate for a
bugzilla, but I thought I’d ask here first.
As part of our launch process
for a remote hardware target, we need to download the elf file to the
board. This is accomplished by
a shell script which does some processing and then launches an executable to
download to the board. So we
have a step in our launch which runs the download script. If the elf file is large, the
download can take some time, so it would be nice to be able to cancel the
process. Here’s a snippet of
code from the launch configuration delegate which should allow for
cancelling:
Process
process = exec(runCommandArray,
getEnvironmentProperty(config), currentWorkingDir);
IProcess
downloadProcess
= DebugPlugin.newProcess(launch, process, renderProcessLabel(getRunLabel()));
int
total_work = 0;
while
(!downloadProcess.isTerminated())
{
if (monitor.isCanceled())
{
if (downloadProcess.canTerminate())
downloadProcess.terminate();
return false;
}
if (total_work <= 90)
monitor.worked(10);
try
{
Thread.sleep(1000);
}
catch (InterruptedException
e)
{}
}
The runCommandArray consists of
the path for sh, then the name of the script and then the arguments for the
script. The exec command ends
up running the following line of code:
ProcessFactory.getFactory().exec(cmdLine,
envp, workingDirectory);
When the script is run from the
command line, it can be cancelled successfully and it cleans up its child
processes. However, when run
from eclipse, the call to terminate() hangs until the download program
(which was launched by the script) has finished. From debugging, it looks as though
the culprit is the call to:
((SpawnerInputStream)getErrorStream()).close();
in the destroy method of the
Spawner.
Sorry for the lengthy
description of the problem, but is there some part of the cancel process
that I’m missing, or is there some kind of problem with the Spawner that
means that it doesn’t terminate processes properly? I’m running on Windows XP and the
problem seems to exist in CDT 1.2.1 and 2.0. If a bugzilla would be more
appropriate than a discussion in this mailing list, feel free to let me know
and I’ll submit the problem there.
Thanks in
advance,
James
Langley
Senior
Software Engineer
Altera European Technology Centre
Holmers
Farm Way
High
Wycombe
Bucks HP12 4XF
United Kingdon
http://www.altera.com