Patch from Scott McKellar:
authormiker <miker@9efc2488-bf62-4759-914b-345cdb29e865>
Tue, 12 Jun 2007 01:05:53 +0000 (01:05 +0000)
committermiker <miker@9efc2488-bf62-4759-914b-345cdb29e865>
Tue, 12 Jun 2007 01:05:53 +0000 (01:05 +0000)
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

index 235a7e4..2585719 100644 (file)
@@ -18,8 +18,8 @@ GNU General Public License for more details.
 #include <stdio.h>
 #include <time.h>
 
-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;
 }