Skip to content

Commit 46fcbf7

Browse files
committed
Release statement (#102)
1 parent be42e8f commit 46fcbf7

3 files changed

Lines changed: 15 additions & 0 deletions

File tree

firebird_utils.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,12 @@ extern "C" void fbu_decode_timestamp_tz(void *master_ptr, const ISC_TIMESTAMP_TZ
8686
timeZoneBufferLength, timeZoneBuffer);
8787
}
8888

89+
extern "C" void fbu_release_statement(void *statement_ptr)
90+
{
91+
Firebird::IStatement* statement = (Firebird::IStatement *)statement_ptr;
92+
if (statement) statement->release();
93+
}
94+
8995
extern "C" int fbu_insert_aliases(void *master_ptr, ISC_STATUS* st, ibase_query *ib_query, void *statement_ptr)
9096
{
9197
Firebird::IMaster* master = (Firebird::IMaster*)master_ptr;

firebird_utils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ int fbu_insert_field_info(void *master_ptr, ISC_STATUS* st, int is_outvar, int n
4646
zval *into_array, void *statement_ptr);
4747
int fbu_insert_aliases(void *master_ptr, ISC_STATUS* st, ibase_query *ib_query,
4848
void *statement_ptr);
49+
void fbu_release_statement(void *statement_ptr);
4950

5051
#endif // FB_API_VER >= 30
5152

ibase_query.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1873,14 +1873,18 @@ static void _php_ibase_field_info(zval *return_value, ibase_query *ib_query, int
18731873
if(IBG(master_instance) && IBG(get_statement_interface)) {
18741874
void *statement = NULL;
18751875
if(((fb_get_statement_interface_t)IBG(get_statement_interface))(IB_STATUS, &statement, &ib_query->stmt)){
1876+
fbu_release_statement(statement);
18761877
_php_ibase_error();
18771878
RETURN_FALSE;
18781879
}
18791880

18801881
if(fbu_insert_field_info(IBG(master_instance), IB_STATUS, is_outvar, num, return_value, statement)){
1882+
fbu_release_statement(statement);
18811883
_php_ibase_error();
18821884
RETURN_FALSE;
18831885
}
1886+
1887+
fbu_release_statement(statement);
18841888
} else {
18851889
#endif
18861890
// Old API
@@ -2174,12 +2178,16 @@ static int _php_ibase_alloc_ht_aliases(ibase_query *ib_query)
21742178
if(IBG(master_instance) && IBG(get_statement_interface)) {
21752179
void *statement = NULL;
21762180
if(((fb_get_statement_interface_t)IBG(get_statement_interface))(IB_STATUS, &statement, &ib_query->stmt)){
2181+
fbu_release_statement(statement);
21772182
return FAILURE;
21782183
}
21792184

21802185
if(fbu_insert_aliases(IBG(master_instance), IB_STATUS, ib_query, statement)){
2186+
fbu_release_statement(statement);
21812187
return FAILURE;
21822188
}
2189+
2190+
fbu_release_statement(statement);
21832191
} else {
21842192
#endif
21852193
// Old API

0 commit comments

Comments
 (0)