From 84dc01e773388c2c72a1fc437f313dd5747e7809 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 8 Feb 2013 20:30:26 +0100 Subject: [PATCH] Report inotify instances limit error --- bin/linux/fsnotifier | Bin 22809 -> 22734 bytes bin/linux/fsnotifier64 | Bin 29308 -> 29227 bytes native/fsNotifier/linux/fsnotifier.h | 10 ++- native/fsNotifier/linux/inotify.c | 62 +++++++++--------- native/fsNotifier/linux/main.c | 28 +++++--- .../openapi/vfs/impl/local/FileWatcher.java | 2 +- 6 files changed, 60 insertions(+), 42 deletions(-) diff --git a/bin/linux/fsnotifier b/bin/linux/fsnotifier index df7985a5bfc2147a9c26006274ebecda1bf2cbf2..a34b7855db4f8fc3fa4bc66447e74a79d662202d 100755 GIT binary patch delta 6430 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 E1EAmiNB{r; delta 6373 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 GS^gh0MA+^C diff --git a/bin/linux/fsnotifier64 b/bin/linux/fsnotifier64 index 9f0b3a46d2f2488c8b375be26b8227112ad4274d..812e326cd6a1136a4e233e1d3890dc7e1d94cd9a 100755 GIT binary patch delta 7254 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 delta 7343 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 SWAW}U*Pi@Mf3ICI;Qs*Y=07w5 diff --git a/native/fsNotifier/linux/fsnotifier.h b/native/fsNotifier/linux/fsnotifier.h index 0b3e52705513..0140d6be8102 100644 --- a/native/fsNotifier/linux/fsnotifier.h +++ b/native/fsNotifier/linux/fsnotifier.h @@ -21,6 +21,14 @@ #include +// messaging +typedef enum { + MSG_INSTANCE_LIMIT, MSG_WATCH_LIMIT +} MSG; + +void message(MSG id); + + // logging void userlog(int priority, const char* format, ...); @@ -59,8 +67,6 @@ enum { bool init_inotify(); void set_inotify_callback(void (* callback)(char*, int)); int get_inotify_fd(); -int get_watch_count(); -bool watch_limit_reached(); int watch(const char* root, array* mounts); void unwatch(int id); bool process_inotify_input(); diff --git a/native/fsNotifier/linux/inotify.c b/native/fsNotifier/linux/inotify.c index 75a97abc1339..8570d032e782 100644 --- a/native/fsNotifier/linux/inotify.c +++ b/native/fsNotifier/linux/inotify.c @@ -49,30 +49,18 @@ static void (* callback)(char*, int) = NULL; #define EVENT_BUF_LEN (2048 * (EVENT_SIZE + 16)) static char event_buf[EVENT_BUF_LEN]; - -static void read_watch_descriptors_count() { - FILE* f = fopen(WATCH_COUNT_NAME, "r"); - if (f == NULL) { - userlog(LOG_ERR, "can't open %s: %s", WATCH_COUNT_NAME, strerror(errno)); - return; - } - - char* str = read_line(f); - if (str == NULL) { - userlog(LOG_ERR, "can't read from %s", WATCH_COUNT_NAME); - } - else { - watch_count = atoi(str); - } - - fclose(f); -} +static void read_watch_descriptors_count(); +static void watch_limit_reached(); bool init_inotify() { inotify_fd = inotify_init(); if (inotify_fd < 0) { - userlog(LOG_ERR, "inotify_init: %s", strerror(errno)); + int e = errno; + userlog(LOG_ERR, "inotify_init: %s", strerror(e)); + if (e == EMFILE) { + message(MSG_INSTANCE_LIMIT); + } return false; } userlog(LOG_DEBUG, "inotify fd: %d", get_inotify_fd()); @@ -96,6 +84,24 @@ bool init_inotify() { return true; } +static void read_watch_descriptors_count() { + FILE* f = fopen(WATCH_COUNT_NAME, "r"); + if (f == NULL) { + userlog(LOG_ERR, "can't open %s: %s", WATCH_COUNT_NAME, strerror(errno)); + return; + } + + char* str = read_line(f); + if (str == NULL) { + userlog(LOG_ERR, "can't read from %s", WATCH_COUNT_NAME); + } + else { + watch_count = atoi(str); + } + + fclose(f); +} + inline void set_inotify_callback(void (* _callback)(char*, int)) { callback = _callback; @@ -107,16 +113,6 @@ inline int get_inotify_fd() { } -inline int get_watch_count() { - return watch_count; -} - - -inline bool watch_limit_reached() { - return limit_reached; -} - - #define EVENT_MASK IN_MODIFY | IN_ATTRIB | IN_CREATE | IN_DELETE | IN_MOVE | IN_DELETE_SELF static int add_watch(const char* path, watch_node* parent) { @@ -128,7 +124,7 @@ static int add_watch(const char* path, watch_node* parent) { } else if (errno == ENOSPC) { userlog(LOG_WARNING, "inotify_add_watch(%s): %s", path, strerror(errno)); - limit_reached = true; + watch_limit_reached(); return ERR_CONTINUE; } else { @@ -188,6 +184,12 @@ static int add_watch(const char* path, watch_node* parent) { return wd; } +static void watch_limit_reached() { + if (!limit_reached) { + limit_reached = true; + message(MSG_WATCH_LIMIT); + } +} static void rm_watch(int wd, bool update_parent) { watch_node* node = table_get(watches, wd); diff --git a/native/fsNotifier/linux/main.c b/native/fsNotifier/linux/main.c index 87fcf26139b9..27372e35acc1 100644 --- a/native/fsNotifier/linux/main.c +++ b/native/fsNotifier/linux/main.c @@ -48,8 +48,12 @@ #define HELP_MSG \ "Try 'fsnotifier --help' for more information.\n" -#define INOTIFY_LIMIT_MSG \ - "The current inotify(7) watch limit of %d is too low. " \ +#define INSTANCE_LIMIT_TEXT \ + "The inotify(7) instances limit reached. " \ + "More details.\n" + +#define WATCH_LIMIT_TEXT \ + "The current inotify(7) watch limit is too low. " \ "More details.\n" typedef struct { @@ -59,7 +63,6 @@ typedef struct { static array* roots = NULL; -static bool show_warning = true; static bool self_test = false; static void init_log(); @@ -152,6 +155,19 @@ static void init_log() { } +void message(MSG id) { + if (id == MSG_INSTANCE_LIMIT) { + output("MESSAGE\n" INSTANCE_LIMIT_TEXT); + } + else if (id == MSG_WATCH_LIMIT) { + output("MESSAGE\n" WATCH_LIMIT_TEXT); + } + else { + userlog(LOG_ERR, "unknown message: %d", id); + } +} + + void userlog(int priority, const char* format, ...) { va_list ap; @@ -353,12 +369,6 @@ static bool register_roots(array* new_roots, array* unwatchable, array* mounts) return false; } else if (id != ERR_IGNORE) { - if (show_warning && watch_limit_reached()) { - int limit = get_watch_count(); - userlog(LOG_WARNING, "watch limit (%d) reached", limit); - output("MESSAGE\n" INOTIFY_LIMIT_MSG, limit); - show_warning = false; // warn only once - } CHECK_NULL(array_push(unwatchable, strdup(unflattened)), false); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java index 631b7d0b3d10..20ee724be726 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java @@ -173,7 +173,7 @@ public class FileWatcher { private static boolean isUpToDate(File executable) { long length = SystemInfo.isWindows ? 70216 : SystemInfo.isMac ? 13924 : - SystemInfo.isLinux ? SystemInfo.isAMD64 ? 29308 : 22809 : + SystemInfo.isLinux ? SystemInfo.isAMD64 ? 29227 : 22734 : -1; return length < 0 || length == executable.length(); }