--- interbase.c	Tue Mar 19 16:29:17 2002
+++ interbase.c	Mon Apr  1 22:25:41 2002
@@ -383,12 +383,17 @@
 /* {{{ _php_ibase_free_result() */
 static void _php_ibase_free_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
 {
+	char tr_items[] = {isc_info_tra_id };
+	char tmp[32]; /* should be enough as on the Api doc */
+
 	ibase_result *ib_result = (ibase_result *)rsrc->ptr;
 
 	IBDEBUG("Freeing result...");
 	if (ib_result){
 		_php_ibase_free_xsqlda(ib_result->out_sqlda);
-		if (ib_result->drop_stmt && ib_result->stmt) {
+		isc_transaction_info(IB_STATUS, &ib_result->trans,sizeof(tr_items), tr_items, sizeof(tmp), tmp );
+		/* we have a transaction still open and we really want to drop the statement ? */
+		if ( !(IB_STATUS[0] && IB_STATUS[1])  && ib_result->drop_stmt && ib_result->stmt ) {
 			IBDEBUG("Dropping statement handle (free_result)...");
 			if (isc_dsql_free_statement(IB_STATUS, &ib_result->stmt, DSQL_drop)) {
 				_php_ibase_error();
@@ -416,6 +421,8 @@
 /* {{{ _php_ibase_free_query() */
 static void _php_ibase_free_query(ibase_query *ib_query)
 {
+	char tr_items[] = {isc_info_tra_id };
+	char tmp[32] ; /* ...should be enough as on the Api doc */
 	TSRMLS_FETCH();
 
 	IBDEBUG("Freeing query...");
@@ -426,7 +433,9 @@
 		if (ib_query->out_sqlda) {
 			efree(ib_query->out_sqlda);
 		}
-		if (ib_query->stmt) {
+		isc_transaction_info(IB_STATUS, &ib_query->trans,sizeof(tr_items), tr_items, sizeof(tmp), tmp );
+		/* we have the trans still open and a statement to drop? */
+		if ( !(IB_STATUS[0] && IB_STATUS[0])  &&  ib_query->stmt) {
 			IBDEBUG("Dropping statement handle (free_query)...");
 			if (isc_dsql_free_statement(IB_STATUS, &ib_query->stmt, DSQL_drop)){
 				_php_ibase_error();

