From fbcf616c036124175afad7f405e07b37df0b55b4 Mon Sep 17 00:00:00 2001 From: miker Date: Tue, 12 Jun 2007 01:05:53 +0000 Subject: [PATCH] Patch from Scott McKellar: 1. I made __osrfChatXMLErrorOcurred and __osrfChatClientSentDisconnect static, and removed the leading underscores from their names. No other source files refer to them. 2. In osrfNewChatServer() I explicitly initialize the port member to zero -- which is already happening implicitly due to the memset() in safe_malloc(). 3. Also in osrfNewChatServer(): the existing code populates the secret member only if the secret parameter is not NULL, and leaves it uninitialized otherwise. However if the secret parameter were NULL we would have already performed an early exit. I populate the secret member unconditionally, just as we do with the domain member. I also moved this assignment up with the other assignments, for a more readable flow. 4. In osrfChatServerFree(), the existing code leaves several memory references dangling, without freeing them. I added code to free the domain member, the deadNodes member, and finally the osrfChatServer itself. git-svn-id: svn://svn.open-ils.org/OpenSRF/trunk@936 9efc2488-bf62-4759-914b-345cdb29e865 --- src/jserver/osrf_chat.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/jserver/osrf_chat.c b/src/jserver/osrf_chat.c index 235a7e4..2585719 100644 --- a/src/jserver/osrf_chat.c +++ b/src/jserver/osrf_chat.c @@ -18,8 +18,8 @@ GNU General Public License for more details. #include #include -int __osrfChatXMLErrorOcurred = 0; -int __osrfChatClientSentDisconnect = 0; +static int osrfChatXMLErrorOcurred = 0; +static int osrfChatClientSentDisconnect = 0; /* shorter version of strcmp */ static int eq(const char* a, const char* b) { return (a && b && !strcmp(a,b)); } @@ -83,14 +83,16 @@ osrfChatServer* osrfNewChatServer( char* domain, char* secret, int s2sport ) { server->deadNodes = osrfNewList(); server->nodeList->freeItem = &osrfChatNodeFree; server->domain = strdup(domain); + server->secret = strdup(secret); server->s2sport = s2sport; + server->port = 0; + // Build socket manager server->mgr = safe_malloc(sizeof(socket_manager)); server->mgr->data_received = &osrfChatHandleData; server->mgr->blob = server; server->mgr->on_socket_closed = &osrfChatSocketClosed; - if(secret) server->secret = strdup(secret); return server; } @@ -192,8 +194,12 @@ void osrfChatServerFree(osrfChatServer* server ) { if(!server) return; osrfHashFree(server->nodeHash); osrfListFree(server->nodeList); + osrfListFree(server->deadNodes); free(server->mgr); + free(server->domain); free(server->secret); + + free(server); } @@ -399,16 +405,16 @@ int osrfChatPushData( osrfChatServer* server, osrfChatNode* node, char* data ) { xmlParseChunk(node->parserCtx, data, strlen(data), 0); node->inparse = 0; - if(__osrfChatXMLErrorOcurred) { - __osrfChatXMLErrorOcurred = 0; + if(osrfChatXMLErrorOcurred) { + osrfChatXMLErrorOcurred = 0; return -1; } /* we can't do cleanup of the XML handlers while in the middle of a data push, so set flags in the data push and doe the cleanup here */ /* - if(__osrfChatClientSentDisconnect) { - __osrfChatClientSentDisconnect = 0; + if(osrfChatClientSentDisconnect) { + osrfChatClientSentDisconnect = 0; osrfChatNodeFinish( server, node ); } */ @@ -797,7 +803,7 @@ void osrfChatHandleCharacter( void* blob, const xmlChar *ch, int len) { void osrfChatParseError( void* blob, const char* msg, ... ) { - __osrfChatXMLErrorOcurred = 1; + osrfChatXMLErrorOcurred = 1; } -- 2.43.2