Fix LP: #525926; conky sigsegv if config file is deleted
authorCesare Tirabassi <norsetto@ubuntu.com>
Mon, 22 Feb 2010 21:45:51 +0000 (22:45 +0100)
committerCesare Tirabassi <norsetto@ubuntu.com>
Mon, 22 Feb 2010 21:48:32 +0000 (22:48 +0100)
Basically, we only relod if the file is modified but still handle the case
where the watch gets lost. Maybe we should just ignore IN_IGNORE altogether?
(cherry picked from commit 085c39d39464642746a1883266d9dffcfc10e84c)

src/conky.c

index fbf9272..9f503c3 100644 (file)
@@ -3915,10 +3915,12 @@ static void main_loop(void)
                                len = read(inotify_fd, inotify_buff, INOTIFY_BUF_LEN);
                                while (len > 0 && idx < len) {
                                        struct inotify_event *ev = (struct inotify_event *) &inotify_buff[idx];
-                                       if (ev->wd == inotify_config_wd && (ev->mask & IN_MODIFY || ev->mask & IN_IGNORED)) {
-                                               /* current_config should be reloaded */
-                                               NORM_ERR("'%s' modified, reloading...", current_config);
-                                               reload_config();
+                                       if (ev->wd == inotify_config_wd) {
+                                               if (ev->mask & IN_MODIFY) {
+                                                       /* current_config should be reloaded */
+                                                       NORM_ERR("'%s' modified, reloading...", current_config);
+                                                       reload_config();
+                                               }
                                                if (ev->mask & IN_IGNORED) {
                                                        /* for some reason we get IN_IGNORED here
                                                         * sometimes, so we need to re-add the watch */