[Vortex] How to correctly close a connection?

Robert M. Münch robert.muench at robertmuench.de
Thu Oct 16 22:06:58 CEST 2008


Am 14.10.2008, 18:59 Uhr, schrieb Francis Brosnan Blazquez  
<francis at aspl.es>:

> ..vortex only deallocs those pointers that have a dealloc function
> associated.

Hi, than I'm wondering even more why it crashes because I only use  
vortext_connection_set_data but not the _full variante.

I'm still stucked.

This is the output of my on_connection_close handler on the receiver  
(server):

--> on_connection_closed (server handler)
to_rebol_processor: socket created
to_rebol_processor: data send, message = connection-closed [id 2 host  
192.168.237.128 port 2690]
to_rebol_processor: socket closed
<-- on_connection_closed (server handler)

Now comes some vortex log output:

--> START
closing connection id=2 to 192.168.237.128:2690
closing session id=2 and set to be not connected
calling to discard messages pending to be sequenced for connection id=2
decreased connection id=2 reference count to 0 decreased by vortex reader  
(process)
freeing connection id=2
calling to discard messages pending to be sequenced for connection id=2
freeing connection channels id=2
channel=0 unref called, ref count status after calling=0
   freeing channel=0, ref count is 0
freeing resources for channel 0
freeing receive_mutex
freeing send_mutex channel=0
freeing close_mutex
freeing pending_mutex
freeing serialize_mutex
freeing ref_mutex
freeing close_cond
freeing pending_cond
freeing messages queue
freeing SEQ frames queue
freeing waiting reply queue
freeing previous frames
freeing channel node
<-- END

This channel stuff output is now repeated for each channel. That's ok.  
Than I see this:

	freeing connection custom data holder id=2

and than it crashes.

The above message is issued from this code inside vortext_connection.c

	vortex_log (LOG_DOMAIN, VORTEX_LEVEL_DEBUG, "freeing connection custom  
data holder id=%d", connection->id);
	/* free connection data hash */
	if (connection->data) {
		vortex_hash_destroy (connection->data);
		connection->data = NULL;
	}

I really don't have a clue why it crashes. To see if this is the root  
cause at all I tried to use the following line in my on_connection_close  
handler:

	// ATT: hack to avoid server crash, produces memory leak
	client_connection->data = NULL;

But this won't compile with GCC. I get an "dereferencing to incomplete  
type error". I have no clue why. I get the same error if I want to add:

	// traverse the hash
	vortex_hash_foreach(client_connection->data, hash_debug, NULL);

to take a look at what's stored inside the hash.

Any further idea?

-- 
Robert M. Münch
Management and IT freelancer
http://www.robertmuench.de


More information about the Vortex mailing list