void swoole_set_object(zval *object, void *ptr) { #if PHP_MAJOR_VERSION < 7 TSRMLS_FETCH_FROM_CTX(sw_thread_ctx ? sw_thread_ctx : NULL); zend_object_handle handle = Z_OBJ_HANDLE_P(object); #else int handle = (int) Z_OBJ_HANDLE(*object); #endif assert(handle < SWOOLE_OBJECT_MAX); if (handle >= swoole_objects.size) { uint32_t old_size = swoole_objects.size; uint32_t new_size = swoole_get_new_size(old_size, handle TSRMLS_CC); void *old_ptr = swoole_objects.array; void *new_ptr = NULL; new_ptr = realloc(old_ptr, sizeof(void*) * new_size); if (!new_ptr) { swoole_php_fatal_error(E_ERROR, "malloc(%d) failed.", (int )(new_size * sizeof(void *))); return; } bzero(new_ptr + (old_size * sizeof(void*)), (new_size - old_size) * sizeof(void*)); swoole_objects.array = new_ptr; swoole_objects.size = new_size; } swoole_objects.array[handle] = ptr; }
void swoole_set_property(zval *object, int property_id, void *ptr) { #if PHP_MAJOR_VERSION < 7 TSRMLS_FETCH_FROM_CTX(sw_thread_ctx ? sw_thread_ctx : NULL); zend_object_handle handle = Z_OBJ_HANDLE_P(object); #else int handle = (int) Z_OBJ_HANDLE(*object); #endif assert(handle < SWOOLE_OBJECT_MAX); if (handle >= swoole_objects.property_size[property_id]) { uint32_t old_size = swoole_objects.property_size[property_id]; uint32_t new_size = 0; void *old_ptr = NULL; void *new_ptr = NULL; if (old_size == 0) { new_size = 65536; new_ptr = calloc(new_size, sizeof(void *)); } else { new_size = swoole_get_new_size(old_size, handle TSRMLS_CC); old_ptr = swoole_objects.property[property_id]; new_ptr = realloc(old_ptr, new_size * sizeof(void *)); } if (new_ptr == NULL) { swoole_php_fatal_error(E_ERROR, "malloc(%d) failed.", (int )(new_size * sizeof(void *))); return; } if (old_size > 0) { bzero(new_ptr + old_size * sizeof(void*), (new_size - old_size) * sizeof(void*)); } swoole_objects.property_size[property_id] = new_size; swoole_objects.property[property_id] = new_ptr; } swoole_objects.property[property_id][handle] = ptr; }
static int pgsql_stmt_dtor(pdo_stmt_t *stmt) { pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data; zend_bool server_obj_usable = IS_OBJ_VALID(EG(objects_store).object_buckets[Z_OBJ_HANDLE(stmt->database_object_handle)]) && !(GC_FLAGS(Z_OBJ(stmt->database_object_handle)) & IS_OBJ_FREE_CALLED); if (S->result) { /* free the resource */ PQclear(S->result); S->result = NULL; } if (S->stmt_name) { if (S->is_prepared && server_obj_usable) { pdo_pgsql_db_handle *H = S->H; char *q = NULL; PGresult *res; spprintf(&q, 0, "DEALLOCATE %s", S->stmt_name); res = PQexec(H->server, q); efree(q); if (res) { PQclear(res); } } efree(S->stmt_name); S->stmt_name = NULL; } if (S->param_lengths) { efree(S->param_lengths); S->param_lengths = NULL; } if (S->param_values) { efree(S->param_values); S->param_values = NULL; } if (S->param_formats) { efree(S->param_formats); S->param_formats = NULL; } if (S->param_types) { efree(S->param_types); S->param_types = NULL; } if (S->query) { efree(S->query); S->query = NULL; } if (S->cursor_name) { if (server_obj_usable) { pdo_pgsql_db_handle *H = S->H; char *q = NULL; PGresult *res; spprintf(&q, 0, "CLOSE %s", S->cursor_name); res = PQexec(H->server, q); efree(q); if (res) PQclear(res); } efree(S->cursor_name); S->cursor_name = NULL; } if(S->cols) { efree(S->cols); S->cols = NULL; } efree(S); stmt->driver_data = NULL; return 1; }