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.