Hi darkraven,

Excerpts from DR's message of 2012-03-03 13:29:52 +0100:
> If i3bar is running in hide mode, when i3wm exit, i3bar will exit
> without killing its child process, leaving a couple of processes in
> 'T' mode (i.e. Stopped).
Good catch, thanks.

> I'm not very sure I've done things right. I might change some exit()s
> called before ev_loop() into ev_break(), or leave some exit()s
> unconverted. Someone please review this patch.
Here are a few comments about your patch:

1) You changed a few variables without any obvious reason. Please don’t do
   that, always keep patches minimal.

2) Instead of using ev_break(main_loop, EVBREAK_ALL), the ev manpage suggests
   ev_break(EV_A_ EVBREAK_ALL); within a handler.

3) Why do you even bother to communicate an exit status? i3bar is a
   forever-running process. When it exits, it failed by definition. The exit
   code can always be EXIT_FAILURE.

4) You don’t need to free memory before exiting, the OS will clean it up when
   the process exits.

But, most importantly, taking a step back from all this: When you call ev_break
and return from one function, the code of another function might still be
executed (I think this is what Fernando was trying to say). Thus, ev_break +
return is actually not equivalent to exit().

Therefore, I just pushed commit http://c.i3wm.org/d519659, which works for me
to fix this problem.

Best regards,
Michael

Reply via email to