Hello,

I've had a problem when using 'execute_array' to insert (lots of) records with DBD::Oracle (version 1.50): the script consumed too much memory and finally crashed (killed by kernel). I tried to trigger the garbage-collection with some code rewrite but it didn't help. But if I told Oracle *not* to use an UTF-8 charset (changing NLS_LANG from (for example) "german_germany.utf8" to "german_germany.we8dec"), the problem disappeared.

After some investigations, I think the leak is in 'ora_st_execute_array' method of dbdimp.c. Please find the patch as attachment. As I'm completly new to writing C for Perl, it may be something I did not understand or did not correctly fixed. Sorry if it would be the case.

Thanks & best regards,
Pierre-Alain Blanc


Index: dbdimp.c
===================================================================
--- dbdimp.c	(revision 15435)
+++ dbdimp.c	(working copy)
@@ -3839,6 +3839,7 @@
 	}
 	Safefree(phs);
 	Safefree(utf8_flgs);
+	SvREFCNT_dec(tuples_utf8_av);
 	/* Store array of bind typles, for use in OCIBindDynamic() callback. */
 	imp_sth->bind_tuples = tuples_av;
 	imp_sth->rowwise = (columns_av == NULL);

Reply via email to