Linux fsnotifier output buffering fixed; cleanup cidr/124.591 idea/124.589 phpstorm/124.587 pycharm/124.588 rubymine/124.590 storm/124.586
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>
Sun, 20 Jan 2013 18:49:14 +0000 (22:49 +0400)
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>
Sun, 20 Jan 2013 18:49:14 +0000 (22:49 +0400)
bin/linux/fsnotifier
bin/linux/fsnotifier64
native/fsNotifier/linux/main.c
native/fsNotifier/mac/fsnotifier.c
platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java

index 436cfc3d68b8d811eaed2ebc1097b4b678513c20..df7985a5bfc2147a9c26006274ebecda1bf2cbf2 100755 (executable)
Binary files a/bin/linux/fsnotifier and b/bin/linux/fsnotifier differ
index d7c47273bd3d50e078c7f55ef65947721016a32e..9f0b3a46d2f2488c8b375be26b8227112ad4274d 100755 (executable)
Binary files a/bin/linux/fsnotifier64 and b/bin/linux/fsnotifier64 differ
index 25c04350d1bdad598ab329d4b5616b8305d3f7c7..87fcf26139b90871d0d99bd8715b0fafde1568b9 100644 (file)
@@ -104,7 +104,6 @@ int main(int argc, char** argv) {
   }
 
   setvbuf(stdin, NULL, _IONBF, 0);
-  setvbuf(stdout, NULL, _IONBF, 0);
 
   roots = array_create(20);
   if (init_inotify() && roots != NULL) {
@@ -120,7 +119,7 @@ int main(int argc, char** argv) {
     unregister_roots();
   }
   else {
-    printf("GIVEUP\n");
+    output("GIVEUP\n");
   }
   close_inotify();
   array_delete(roots);
@@ -430,7 +429,7 @@ static void report_event(char* event, char* path) {
   userlog(LOG_DEBUG, "%s: %s", event, path);
 
   int len = strlen(path);
-  for (char* p = path; *p != '\0'; p++){
+  for (char* p = path; *p != '\0'; p++) {
     if (*p == '\n') {
       *p = '\0';
     }
@@ -440,6 +439,8 @@ static void report_event(char* event, char* path) {
   fputc('\n', stdout);
   fwrite(path, len, 1, stdout);
   fputc('\n', stdout);
+
+  fflush(stdout);
 }
 
 
@@ -452,4 +453,6 @@ static void output(const char* format, ...) {
   va_start(ap, format);
   vprintf(format, ap);
   va_end(ap);
+
+  fflush(stdout);
 }
index f7b044074eaaab754e07b9e5ace079ef6dbdc920..0f872b88eb8f98cbff0bd82ec46ddd1d4def0c03 100644 (file)
@@ -24,7 +24,7 @@ static void reportEvent(char *event, char *path) {
     int len = 0;
     if (path != NULL) {
         len = strlen(path);
-        for (char* p = path; *p != '\0'; p++){
+        for (char* p = path; *p != '\0'; p++) {
             if (*p == '\n') {
                 *p = '\0';
             }
index 444f6ce684bf51e86bfe49fa83b55d728b237b68..d23536467b569796f791d6cb369b15aa560a6625 100644 (file)
@@ -176,9 +176,9 @@ public class FileWatcher {
   private static boolean isUpToDate(File executable) {
     long length = SystemInfo.isWindows ? 70216 :
                   SystemInfo.isMac ? 13924 :
-                  SystemInfo.isLinux ? SystemInfo.isAMD64 ? 29296 : 22793 :
+                  SystemInfo.isLinux ? SystemInfo.isAMD64 ? 29308 : 22809 :
                   -1;
-    return length > 0 && length == executable.length();
+    return length < 0 || length == executable.length();
   }
 
   private void notifyOnFailure(final String cause, @Nullable final NotificationListener listener) {
@@ -474,7 +474,8 @@ public class FileWatcher {
         }
       }
       else {
-        processChange(line.replace('\0', '\n'), myLastOp);
+        String path = line.replace('\0', '\n');  // unescape
+        processChange(path, myLastOp);
         myLastOp = null;
       }
     }