seed r425 - trunk/modules/Multiprocessing



Author: racarr
Date: Wed Dec 10 00:42:33 2008
New Revision: 425
URL: http://svn.gnome.org/viewvc/seed?rev=425&view=rev

Log:
Close pipes when Pipe object is collected.


Modified:
   trunk/modules/Multiprocessing/multi.c

Modified: trunk/modules/Multiprocessing/multi.c
==============================================================================
--- trunk/modules/Multiprocessing/multi.c	(original)
+++ trunk/modules/Multiprocessing/multi.c	Wed Dec 10 00:42:33 2008
@@ -12,6 +12,14 @@
 	GIOChannel * write;
 } pipe_priv;
 
+void pipe_finalize(SeedObject pipeobj)
+{
+	pipe_priv * priv = seed_object_get_private(pipeobj);
+	g_io_channel_unref(priv->read);
+	g_io_channel_unref(priv->write);
+	g_free(priv);
+}
+
 SeedObject seed_construct_pipe(SeedContext ctx,
 							   SeedObject constructor,
 							   size_t argument_count,
@@ -42,6 +50,11 @@
 	priv_two->read = g_io_channel_unix_new(fd2[0]);
 	priv_two->write = g_io_channel_unix_new(fd1[1]);
 	
+	g_io_channel_set_close_on_unref(priv_one->read, TRUE);
+	g_io_channel_set_close_on_unref(priv_one->write, TRUE);
+	g_io_channel_set_close_on_unref(priv_two->read, TRUE);
+	g_io_channel_set_close_on_unref(priv_two->write, TRUE);
+	
 	jsret = seed_make_object(ctx, 0, 0);
 	jsone = seed_make_object(ctx, pipe_class, priv_one);
 	jstwo = seed_make_object(ctx, pipe_class, priv_two);
@@ -163,6 +176,7 @@
 	
 	pipe_class_def.class_name = "Pipe";
 	pipe_class_def.static_functions = pipe_funcs;
+	pipe_class_def.finalize = pipe_finalize;
 
 	pipe_class = seed_create_class(&pipe_class_def);
 	



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]