From 5852c7506fcc6b03e48cddd581a95da1b8a9a41b Mon Sep 17 00:00:00 2001 From: dan Date: Wed, 19 Apr 2000 14:54:34 +0000 Subject: [PATCH] fix for a possible crash in some circumstances, caused by an illegal mem acccess. --- WINGs/connection.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/WINGs/connection.c b/WINGs/connection.c index 8e73ae38..49f6868f 100644 --- a/WINGs/connection.c +++ b/WINGs/connection.c @@ -165,6 +165,7 @@ inputHandler(int fd, int mask, void *clientData) /*FOLD00*/ if ((mask & WIWriteMask)) { if (cPtr->state == WCInProgress) { + Bool failed; int result; int len = sizeof(result); @@ -172,9 +173,11 @@ inputHandler(int fd, int mask, void *clientData) /*FOLD00*/ (void*)&result, &len) == 0 && result != 0) { cPtr->state = WCFailed; WCErrorCode = result; + failed = True; /* should call wsyserrorwithcode(result, ...) here? */ } else { cPtr->state = WCConnected; + failed = False; } if (cPtr->handler.write) { @@ -182,10 +185,12 @@ inputHandler(int fd, int mask, void *clientData) /*FOLD00*/ cPtr->handler.write = NULL; } + /* if the connection failed it may get destroyed in the delegate */ if (cPtr->delegate && cPtr->delegate->didInitialize) (*cPtr->delegate->didInitialize)(cPtr->delegate, cPtr); - if (cPtr->state == WCFailed) + /* don't access cPtr since it may have been destroyed by delegate */ + if (failed) return; } else if (cPtr->state == WCConnected) { WMFlushConnection(cPtr);