1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

Get rid of unnecessary wrapping a statement in a free list object

This simplifies the code and reduces memory usage.
This commit is contained in:
Niels Dossche
2025-02-09 18:54:17 +01:00
parent 43ac692a09
commit bc74cff479
2 changed files with 13 additions and 35 deletions

View File

@@ -89,12 +89,6 @@ typedef struct _php_sqlite3_agg_context {
typedef struct _php_sqlite3_stmt_object php_sqlite3_stmt;
typedef struct _php_sqlite3_result_object php_sqlite3_result;
/* sqlite3 objects to be destroyed */
typedef struct _php_sqlite3_free_list {
zval stmt_obj_zval;
php_sqlite3_stmt *stmt_obj;
} php_sqlite3_free_list;
/* Structure for SQLite Result object. */
struct _php_sqlite3_result_object {
php_sqlite3_db_object *db_obj;

View File

@@ -35,7 +35,7 @@ ZEND_DECLARE_MODULE_GLOBALS(sqlite3)
static PHP_GINIT_FUNCTION(sqlite3);
static int php_sqlite3_authorizer(void *autharg, int action, const char *arg1, const char *arg2, const char *arg3, const char *arg4);
static void sqlite3_param_dtor(zval *data);
static int php_sqlite3_compare_stmt_zval_free(php_sqlite3_free_list **free_list, zval *statement);
static int php_sqlite3_compare_stmt_zval_free(php_sqlite3_stmt **stmt_obj_ptr, zval *statement);
#define SQLITE3_CHECK_INITIALIZED(db_obj, member, class_name) \
if (!(db_obj) || !(member)) { \
@@ -509,7 +509,6 @@ PHP_METHOD(SQLite3, prepare)
zval *object = ZEND_THIS;
zend_string *sql;
int errcode;
php_sqlite3_free_list *free_item;
db_obj = Z_SQLITE3_DB_P(object);
@@ -537,11 +536,7 @@ PHP_METHOD(SQLite3, prepare)
stmt_obj->initialised = 1;
free_item = emalloc(sizeof(php_sqlite3_free_list));
free_item->stmt_obj = stmt_obj;
ZVAL_OBJ(&free_item->stmt_obj_zval, Z_OBJ_P(return_value));
zend_llist_add_element(&(db_obj->free_list), &free_item);
zend_llist_add_element(&(db_obj->free_list), &stmt_obj);
}
/* }}} */
@@ -607,11 +602,7 @@ PHP_METHOD(SQLite3, query)
case SQLITE_ROW: /* Valid Row */
case SQLITE_DONE: /* Valid but no results */
{
php_sqlite3_free_list *free_item;
free_item = emalloc(sizeof(php_sqlite3_free_list));
free_item->stmt_obj = stmt_obj;
free_item->stmt_obj_zval = stmt;
zend_llist_add_element(&(db_obj->free_list), &free_item);
zend_llist_add_element(&(db_obj->free_list), &stmt_obj);
sqlite3_reset(result->stmt_obj->stmt);
break;
}
@@ -1825,7 +1816,6 @@ PHP_METHOD(SQLite3Stmt, __construct)
zval *db_zval;
zend_string *sql;
int errcode;
php_sqlite3_free_list *free_item;
stmt_obj = Z_SQLITE3_STMT_P(object);
@@ -1852,12 +1842,7 @@ PHP_METHOD(SQLite3Stmt, __construct)
}
stmt_obj->initialised = 1;
free_item = emalloc(sizeof(php_sqlite3_free_list));
free_item->stmt_obj = stmt_obj;
//?? free_item->stmt_obj_zval = ZEND_THIS;
ZVAL_OBJ(&free_item->stmt_obj_zval, Z_OBJ_P(object));
zend_llist_add_element(&(db_obj->free_list), &free_item);
zend_llist_add_element(&(db_obj->free_list), &stmt_obj);
}
/* }}} */
@@ -2151,25 +2136,24 @@ static int php_sqlite3_authorizer(void *autharg, int action, const char *arg1, c
/* {{{ php_sqlite3_free_list_dtor */
static void php_sqlite3_free_list_dtor(void **item)
{
php_sqlite3_free_list *free_item = (php_sqlite3_free_list *)*item;
php_sqlite3_stmt *stmt_obj = *item;
if (free_item->stmt_obj && free_item->stmt_obj->initialised) {
sqlite3_finalize(free_item->stmt_obj->stmt);
free_item->stmt_obj->initialised = 0;
if (stmt_obj && stmt_obj->initialised) {
sqlite3_finalize(stmt_obj->stmt);
stmt_obj->initialised = 0;
}
efree(*item);
}
/* }}} */
static int php_sqlite3_compare_stmt_zval_free(php_sqlite3_free_list **free_list, zval *statement ) /* {{{ */
static int php_sqlite3_compare_stmt_zval_free(php_sqlite3_stmt **stmt_obj_ptr, zval *statement ) /* {{{ */
{
return ((*free_list)->stmt_obj->initialised && Z_PTR_P(statement) == Z_PTR((*free_list)->stmt_obj_zval));
return ((*stmt_obj_ptr)->initialised && Z_OBJ_P(statement) == &(*stmt_obj_ptr)->zo);
}
/* }}} */
static int php_sqlite3_compare_stmt_free( php_sqlite3_free_list **free_list, sqlite3_stmt *statement ) /* {{{ */
static int php_sqlite3_compare_stmt_free(php_sqlite3_stmt **stmt_obj_ptr, sqlite3_stmt *statement ) /* {{{ */
{
return ((*free_list)->stmt_obj->initialised && statement == (*free_list)->stmt_obj->stmt);
return ((*stmt_obj_ptr)->initialised && statement == (*stmt_obj_ptr)->stmt);
}
/* }}} */
@@ -2331,7 +2315,7 @@ static zend_object *php_sqlite3_object_new(zend_class_entry *class_type) /* {{{
intern = zend_object_alloc(sizeof(php_sqlite3_db_object), class_type);
/* Need to keep track of things to free */
zend_llist_init(&(intern->free_list), sizeof(php_sqlite3_free_list *), (llist_dtor_func_t)php_sqlite3_free_list_dtor, 0);
zend_llist_init(&(intern->free_list), sizeof(php_sqlite3_stmt *), (llist_dtor_func_t)php_sqlite3_free_list_dtor, 0);
zend_object_std_init(&intern->zo, class_type);
object_properties_init(&intern->zo, class_type);