Bug #62367 [Fbk->NoF]: OCI8 statement not fully freed if bind data contains references

From: Date: Sun, 11 Jul 2021 04:22:07 +0000
Subject: Bug #62367 [Fbk->NoF]: OCI8 statement not fully freed if bind data contains references
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-234946@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=62367&edit=1 ID: 62367 Updated by: php-bugs@lists.php.net Reported by: galaxy dot mipt at gmail dot com Summary: OCI8 statement not fully freed if bind data contains references -Status: Feedback +Status: No Feedback Type: Bug Package: OCI8 related Operating System: Linux PHP Version: 5.4.4 Assigned To: cmb Private report: N New Comment: No feedback was provided. The bug is being suspended because we assume that you are no longer experiencing the problem. If this is not the case and you are able to provide the information that was requested earlier, please do so and change the status of the bug back to "Re-Opened". Thank you. Previous Comments: ------------------------------------------------------------------------ [2021-06-29 15:37:10] cmb@php.net Is this still an issue with any of the actively supported PHP versions[1]? [1] <https://www.php.net/supported-versions.php> ------------------------------------------------------------------------ [2012-06-19 22:56:30] galaxy dot mipt at gmail dot com Oh, I swapped actual and expected results by mistake ------------------------------------------------------------------------ [2012-06-19 22:53:45] galaxy dot mipt at gmail dot com Description: ------------ Probably I miss some point here but anyway - in the test script below bind data is passed to the query() function as an array from pre-created collection. On each call memory consumption grows by pretty huge value (~65kB) even though oci_free_statement() is called. The important conditions to reproduce: 1. Bind array contains references. Without those I get 639500 639520 2. PL/SQL script actually writes to one of bound variables. With the second (currently commented out) version I get 639516 657136 Test script: --------------- function query($data) { global $conn; $stid = oci_parse($conn, 'begin select :a + :b into :b from dual; end;'); //$stid = oci_parse($conn, 'declare j number; begin select :a + :b into j from dual; end;'); oci_bind_by_name($stid, ':a', $data['a'], 100); oci_bind_by_name($stid, ':b', $data['b'], 100); oci_execute($stid); oci_free_statement($stid); } $conn = oci_connect('user', 'pass', 'dbref'); if (!$conn) { $e = oci_error(); die($e['message']); } $data = array(); for($i = 0; $i < 1000; $i++) { $data[] = array( "a" => 1, "b" => 2 ); } print memory_get_usage() . "\n"; for($i = 0; $i < 100; $i++) { query( array( "a" => &$data[$i]["a"], "b" => &$data[$i]["b"] ) ); } print memory_get_usage() . "\n"; oci_close($conn); Expected result: ---------------- 639500 7202720 Actual result: -------------- 639500 639520 or nor far from this ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=62367&edit=1

« previous php.bugs (#234946) next »