Revision: 7902
Author: [email protected]
Date: Fri Apr  9 08:50:52 2010
Log: Add keep-alive checks in browser plugin, reduce timeout in ShmFutex native
code.

http://code.google.com/p/google-web-toolkit/source/detail?r=7902

Modified:
/changes/jat/csproto/dev/core/src/com/google/gwt/dev/shell/BrowserChannel.java
 /changes/jat/csproto/jni/linux/Makefile
 /changes/jat/csproto/jni/linux/prebuilt/libshmfutex_linux_x86.so
 /changes/jat/csproto/jni/linux/prebuilt/libshmfutex_linux_x86_64.so
 /changes/jat/csproto/plugins/common/HostChannel.cpp
 /changes/jat/csproto/plugins/common/HostChannel.h
 /changes/jat/csproto/plugins/common/SocketTransport.cpp
 /changes/jat/csproto/plugins/common/SocketTransport.h

=======================================
--- /changes/jat/csproto/dev/core/src/com/google/gwt/dev/shell/BrowserChannel.java Thu Apr 8 07:10:55 2010 +++ /changes/jat/csproto/dev/core/src/com/google/gwt/dev/shell/BrowserChannel.java Fri Apr 9 08:50:52 2010
@@ -285,6 +285,7 @@
       istr = socketTransport.getInputStream();
       ostr = socketTransport.getOutputStream();
       setName("SocketWatcher for " + socketTransport.getRemoteEndpoint());
+      setDaemon(true);
       start();
     }

=======================================
--- /changes/jat/csproto/jni/linux/Makefile     Wed Apr  7 17:19:42 2010
+++ /changes/jat/csproto/jni/linux/Makefile     Fri Apr  9 08:50:52 2010
@@ -147,4 +147,4 @@
 # Clean rule
 ##
 clean:
-       @-rm -rf $(OBJDIR) $(OUT)
+       @-rm -rf $(OBJDIR)
=======================================
--- /changes/jat/csproto/jni/linux/prebuilt/libshmfutex_linux_x86.so Thu Apr 8 07:10:55 2010 +++ /changes/jat/csproto/jni/linux/prebuilt/libshmfutex_linux_x86.so Fri Apr 9 08:50:52 2010
Binary file, no diff available.
=======================================
--- /changes/jat/csproto/jni/linux/prebuilt/libshmfutex_linux_x86_64.so Thu Apr 8 07:10:55 2010 +++ /changes/jat/csproto/jni/linux/prebuilt/libshmfutex_linux_x86_64.so Fri Apr 9 08:50:52 2010
Binary file, no diff available.
=======================================
--- /changes/jat/csproto/plugins/common/HostChannel.cpp Thu Apr 8 13:25:31 2010 +++ /changes/jat/csproto/plugins/common/HostChannel.cpp Fri Apr 9 08:50:52 2010
@@ -210,12 +210,13 @@
Debug::log(Debug::Error) << "Disconnecting already disconnected channel" << Debug::flush;
     return false;
   }
-  // send this on socket instead
-#if 0
-  beginWriteMessage();
-  QuitMessage::send(*this);
-  endWriteMessage();
-#endif
+  // always send quit on socket
+  if (socketTransport) {
+    // ignore errors since we are shutting down anyway
+    socketTransport->beginWriteMessage()
+        && socketTransport->writeByte(MESSAGE_TYPE_QUIT)
+        && socketTransport->endWriteMessage();
+  }
   disconnectTransport();
   return true;
 }
=======================================
--- /changes/jat/csproto/plugins/common/HostChannel.h Thu Apr 8 07:10:55 2010 +++ /changes/jat/csproto/plugins/common/HostChannel.h Fri Apr 9 08:50:52 2010
@@ -116,7 +116,13 @@
   bool sendDouble(const double data);

   bool beginReadMessage() {
-    return transport->beginReadMessage();
+    while (!transport->beginReadMessage()) {
+      if (transport == socketTransport || !socketTransport
+          || !socketTransport->checkAlive()) {
+        return false;
+      }
+    }
+    return true;
   }

   void endReadMessage() {
@@ -124,7 +130,13 @@
   }

   bool beginWriteMessage() {
-    return transport->beginWriteMessage();
+    while (!transport->beginWriteMessage()) {
+      if (transport == socketTransport || !socketTransport
+          || !socketTransport->checkAlive()) {
+        return false;
+      }
+    }
+    return true;
   }

   bool endWriteMessage() {
=======================================
--- /changes/jat/csproto/plugins/common/SocketTransport.cpp Mon Apr 5 09:04:38 2010 +++ /changes/jat/csproto/plugins/common/SocketTransport.cpp Fri Apr 9 08:50:52 2010
@@ -14,6 +14,7 @@
  * the License.
  */

+#include "BrowserChannel.h"
 #include "SocketTransport.h"

 SocketTransport::SocketTransport(const char* host, unsigned port) {
@@ -54,3 +55,18 @@
   }
   return sock.readByte();
 }
+
+bool SocketTransport::checkAlive() {
+  if (!isConnected()) {
+    return false;
+  }
+  if (!sock.writeByte(MESSAGE_TYPE_ARE_YOU_ALIVE) || !sock.flush()) {
+    return false;
+  }
+  int result = sock.readByte();
+  if (result != MESSAGE_TYPE_STILL_ALIVE) {
+    sock.disconnect();
+    return false;
+  }
+  return true;
+}
=======================================
--- /changes/jat/csproto/plugins/common/SocketTransport.h Mon Apr 5 09:04:38 2010 +++ /changes/jat/csproto/plugins/common/SocketTransport.h Fri Apr 9 08:50:52 2010
@@ -41,6 +41,11 @@

   // write a single byte to the transport, return true on success
   virtual bool writeByte(char c);
+
+  // check if the socket connection is still alive
+  // Must only be called after having switched to an alternate transport.
+  // returns true if the connection is still active
+  virtual bool checkAlive();
 };

 #endif

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

To unsubscribe, reply using "remove me" as the subject.

Reply via email to