Looks like it's not possible to block the ctrl-c event. It's implemented in 
felix gogo shell ans since every cmd (in a pipe) is executed in a separate 
thread it's not clear witch one should do the interruption control

Maybe the feature "IGNORE_INTERRUPS" should not be offered.

But felix should inform the commands if the execution is canceled. For example 
by checking for the Closeable interface and calling the close() method.


> On 14. Mar 2020, at 11:09, Jean-Baptiste Onofre <[email protected]> wrote:
> 
> Hi Mike,
> 
> Let me take a look.
> 
> Thanks for the report.
> 
> Regards
> JB
> 
>> Le 14 mars 2020 à 09:03, Mike Hummel <[email protected] <mailto:[email protected]>> a 
>> écrit :
>> 
>> Hello,
>> 
>> I did a little bit research for IGNORE_INTERRUPTS in the karaf sources. I 
>> found in master and karaf-4.2.x the same results.
>> 
>> The const is defined in 'Sessio'n and 'SessionProperties', but only used 
>> from 'Session'.
>> 
>> It is only used to enable the behaviour but never used to implement some 
>> kind of behaviour.
>> 
>> Is there someone how can can prove this? And what is the background for two 
>> definitions of the same const? If I have the background I could look for a 
>> fix.
>> 
>> Just now I created KARAF-6645 to track the problem.
>> 
>> Best Regards,
>> 
>> Mike
>> 
>> 
>> 
>> 
>>> On 5. Mar 2020, at 09:53, Mike Hummel <[email protected] <mailto:[email protected]>> 
>>> wrote:
>>> 
>>> It's not easy to say ... In 4.2.3 it's broken and in 4.1.x it was ok.
>>> 
>>> I testet the flag IGNORE_INTERRUPTS in 4.2.7 and it was not working as I 
>>> imagine. I'm even not sure if the flag is exact what I want to do.
>>> 
>>> 
>>>> On 4. Mar 2020, at 09:18, Guillaume Nodet <[email protected] 
>>>> <mailto:[email protected]>> wrote:
>>>> 
>>>> Could you be more specific about "older releases" ? Do you know in which 
>>>> release it broke ?
>>>> 
>>>> Le mer. 4 mars 2020 à 09:14, Mike Hummel <[email protected] 
>>>> <mailto:[email protected]>> a écrit :
>>>> Hello,
>>>> 
>>>> I try to break my karaf commands with Ctrl-C (e.g. by using 
>>>> Thread.sleep()). In older releases this was no problem, but since the 
>>>> shell starts every command in a separate thread the Cltr-C is also caught 
>>>> by gogo and it will unlock the command from the console.
>>>> 
>>>> I also tried this
>>>> 
>>>>             session.put(Session.IGNORE_INTERRUPTS, Boolean.TRUE);
>>>> 
>>>> but it gets not the effect.
>>>> 
>>>> Is there a way to recognise if the current command is separated from the 
>>>> current gogo command line?
>>>> 
>>>> A sample snipped:
>>>> 
>>>>         Object oldIgnoreInterrupts = 
>>>> session.get(Session.IGNORE_INTERRUPTS);
>>>>         try {
>>>>             session.put(Session.IGNORE_INTERRUPTS, Boolean.TRUE);
>>>>             return doExecute(this, cmd, parameters);
>>>>         } finally {
>>>>             session.put(Session.IGNORE_INTERRUPTS, oldIgnoreInterrupts);
>>>>         }
>>>> 
>>>>     public Object doExecute(CmdShitYo base, String cmd, String[] 
>>>> parameters) throws Exception {
>>>>         if (cmd.equals("ctrl-c")) {
>>>>             try {
>>>>                 while (true) {
>>>>                     System.out.println("Wait for Ctrl-C - off");
>>>>                     MThread.sleep(3000);
>>>>                 }
>>>>             } catch (InterruptedException e) {
>>>>                 System.out.println("Interrupted !!!!");
>>>>             }
>>>>         }
>>>>    }
>>>> 
>>>> MThread:
>>>>     public static void sleep(long _millisec) {
>>>>         try {
>>>>             Thread.sleep(_millisec);
>>>>         } catch (InterruptedException e) {
>>>>             log.i(e);
>>>>         }
>>>>     }
>>>> 
>>>> This will output
>>>> 
>>>> Wait for Ctrl-C - off
>>>> Wait for Ctrl-C - on
>>>> Wait for Ctrl-C - off
>>>> Wait for Ctrl-C - on
>>>> ...
>>>> 
>>>> If I interrupt, it will be separated from gogo shell and iterate for ever. 
>>>> - And I see the interrupted exception in the log.
>>>> 
>>>> Thx,
>>>> 
>>>> Mike
>>>> 
>>>> 
>>>> -- 
>>>> ------------------------
>>>> Guillaume Nodet
>>>> 
>>> 
>> 
> 

Reply via email to