[PATCH 2/2] Handle OOM with signal events

2014-05-09 Thread Hardening
This patch handles the case where a signal event source can not be created.
---
 src/compositor.c | 11 +--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/compositor.c b/src/compositor.c
index 6ad3387..047df8a 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -4197,6 +4197,7 @@ int main(int argc, char *argv[])
display = wl_display_create();
 
loop = wl_display_get_event_loop(display);
+   memset(signals, 0, sizeof(signals));
signals[0] = wl_event_loop_add_signal(loop, SIGTERM, on_term_signal,
  display);
signals[1] = wl_event_loop_add_signal(loop, SIGINT, on_term_signal,
@@ -4208,6 +4209,9 @@ int main(int argc, char *argv[])
signals[3] = wl_event_loop_add_signal(loop, SIGCHLD, sigchld_handler,
  NULL);
 
+   if (!signals[0] || !signals[1] || !signals[2] || !signals[3])
+   goto out_signals;
+
config = weston_config_parse(weston.ini);
if (config != NULL) {
weston_log(Using config file '%s'\n,
@@ -4321,8 +4325,11 @@ int main(int argc, char *argv[])
 
wl_signal_emit(ec-destroy_signal, ec);
 
-   for (i = ARRAY_LENGTH(signals); i;)
-   wl_event_source_remove(signals[--i]);
+ out_signals:
+   for (i = ARRAY_LENGTH(signals); i; i--) {
+   if (signals[i-1])
+   wl_event_source_remove(signals[i-1]);
+   }
 
weston_compositor_xkb_destroy(ec);
 
-- 
1.8.1.2

___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: [PATCH 2/2] Handle OOM with signal events

2014-05-09 Thread Kristian Høgsberg
On Fri, May 09, 2014 at 04:03:52PM +0200, Hardening wrote:
 This patch handles the case where a signal event source can not be created.
 ---
  src/compositor.c | 11 +--
  1 file changed, 9 insertions(+), 2 deletions(-)
 
 diff --git a/src/compositor.c b/src/compositor.c
 index 6ad3387..047df8a 100644
 --- a/src/compositor.c
 +++ b/src/compositor.c
 @@ -4197,6 +4197,7 @@ int main(int argc, char *argv[])
   display = wl_display_create();
  
   loop = wl_display_get_event_loop(display);
 + memset(signals, 0, sizeof(signals));

We set all entries of signals[4], and they're going to be valid
signal source pointers or NULL if the allocation fails.  No need to memset.

   signals[0] = wl_event_loop_add_signal(loop, SIGTERM, on_term_signal,
 display);
   signals[1] = wl_event_loop_add_signal(loop, SIGINT, on_term_signal,
 @@ -4208,6 +4209,9 @@ int main(int argc, char *argv[])
   signals[3] = wl_event_loop_add_signal(loop, SIGCHLD, sigchld_handler,
 NULL);
  
 + if (!signals[0] || !signals[1] || !signals[2] || !signals[3])
 + goto out_signals;
 +
   config = weston_config_parse(weston.ini);
   if (config != NULL) {
   weston_log(Using config file '%s'\n,
 @@ -4321,8 +4325,11 @@ int main(int argc, char *argv[])
  
   wl_signal_emit(ec-destroy_signal, ec);
  
 - for (i = ARRAY_LENGTH(signals); i;)
 - wl_event_source_remove(signals[--i]);
 + out_signals:
 + for (i = ARRAY_LENGTH(signals); i; i--) {
 + if (signals[i-1])

We can just add the if condition to the existing loop, no need to
iterate in reverse.

Kristian

 + wl_event_source_remove(signals[i-1]);
 + }
  
   weston_compositor_xkb_destroy(ec);
  
 -- 
 1.8.1.2
 
 ___
 wayland-devel mailing list
 wayland-devel@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/wayland-devel
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel