[Geany-devel] ANN: Configurable Build Menu Alpha in SVN

Thomas Martitz thomas.martitz at xxxxx
Sun Aug 16 10:40:28 UTC 2009


Lex Trotman schrieb:
> Hi Thomas,
>
> Good to hear that there are no major problems.
>
> I can see that you may want to kill a long build that you started by
> accident or when you realise you forgot to do something first.  I've
> done that more than once ;-)
>
> In Geany execute changes to stop while running, but build doesn't.
>
> The difference is because they are run in different ways, execute runs
> in a terminal (either external or VTE) but build commands are run
> directly so that no terminal window pops up and so that the output can
> be captured for parsing for errors.
> Due to problems on windows, builds have to be run synchronously on
> windows, ie the whole of Geany freezes while the build runs (why? I
> don't understand exactly, maybe Enrico can explain it).
> That means that cancelling a windows build can't be done from Geany anyway.
>
> Whilst Linux builds are still asynchronous only one is allowed at a
> time so that output isn't mixed up in the error parser.  So all build
> commands are set insensitive until completion.  To have one menu item
> still enabled and to have it change to stop is going to be quite a bit
> of fiddling unless it is always a fixed menu item or a toolbar button.
>   

Seeing that the Run commands don't gray out too, I think adding a cancel 
button which doesn't gray out is going to be doable without a lot of 
fiddling.
> But as a general action I would be worried about killing a build anyway.
>
> Geany only knows about the parent process, the top level make, not any
> children that make forked to process subdirectories, or because -j was
> used, and they won't get killed (they migrate to be children of init).
>  The overall impact is not well defined, but killing a top level make
> may leave most of the build still running.   Now setting the build
> menu items sensitive and so enabling another build is risky.
>
> And the results of builders other than make is even less well defined.
>
>   


The Rockbox build system (see [1]) has a way to kill builds (even those 
which are started with -jX) using this snippet of perl code. Note that 
kill here is a perl function, which does IIUC killing the childs for us 
(it kills the process groups if the signal parameter is negative). I 
don't know if it helps us though.
Could one try call the perl function from within geany with a crude 
hack/magic?

sub killchild
{
    my ($id) = @_;

    return if (not defined $builds{$id});

    my $pipe = $builds{$id}{pipe};
    $read_set->remove($pipe);

    $busy -= $builds{$id}{cores};

    my $pid = $builds{$id}{pid};
    kill -9, $pid;
    tprint "Killed build $id\n";
    waitpid $pid, 0;

    my $dir = "$cwd/build-$pid";
    if (-d $dir) {
        tprint "Removing $dir\n";
        rmtree $dir;
    }

    delete $builds{$id};
}
> I think we need to consider this a bit more first to find a safe
> general solution.
>
> In the interim why don't you configure an extra execute command to run
> the "killall -9 make".  It can then run asynchronously whilst the
> build is running.
>   

Because my run (and build) command list is full ;)

Best regards.

[1] 
http://daniel.haxx.se/blog/2009/07/05/concepts-of-a-new-distributed-build/



More information about the Devel mailing list