diff --git a/lib/modules/Filesystem.pmod/Monitor.pmod/basic.pike b/lib/modules/Filesystem.pmod/Monitor.pmod/basic.pike index ca65ab6ba2325da7fb22c4e2d2a348124e5d6f5a..fec611c29a2c858f48af2ceece8221a67498e53c 100644 --- a/lib/modules/Filesystem.pmod/Monitor.pmod/basic.pike +++ b/lib/modules/Filesystem.pmod/Monitor.pmod/basic.pike @@ -293,6 +293,12 @@ protected class Monitor(string path, void create() { + if(flags & MF_AUTO || flags & MF_HARD) { + Stdio.Stat fstat = file_stat(path); + if(!fstat) throw(Error.Generic("Cannot create Monitor for non-existent path " + path + + " when flags MF_AUTO or MF_HARD are present.\n")); + } + MON_WERR("Creating monitor for %O.\n", path); Element::create(this); register_path(1); @@ -1001,10 +1007,12 @@ protected void inotify_event(int wd, int event, int cookie, string(8bit) path) // // Create the submonitor. MON_WARN("Monitor lost for path %O.\n", full_path); - m = monitor(full_path, m->flags | MF_AUTO | MF_HARD, + mixed err = catch(m = monitor(full_path, m->flags | MF_AUTO | MF_HARD, m->max_dir_check_interval, m->file_interval_factor, - m->stable_time); + m->stable_time)); + if(err) + MON_WARN("Monitor for %O failed. Message: %s\n", full_path, Error.mkerror(err)->message()); // monitor() will not register monitor for path if filter_file() // returns 0. if (m) {