diff options
author | Andrey Hristov <andrey@php.net> | 2006-05-10 11:53:13 +0000 |
---|---|---|
committer | Andrey Hristov <andrey@php.net> | 2006-05-10 11:53:13 +0000 |
commit | ac97b77ed9b3ec175cb8150f6dbb2709666df2ff (patch) | |
tree | 78bae18d7e305a7478fc747baf3f99035885cfff /ext/mysqli/mysqli_api.c | |
parent | 0881dbd101bd685b0e7fe9964395f56965081b20 (diff) | |
download | php-git-ac97b77ed9b3ec175cb8150f6dbb2709666df2ff.tar.gz |
Don't allocate 2 chunks of memory when one can fit. Reduces memory
fragmentation. There is one more place that fragments memory but it will
complicate the ongoing Unicode upgrade of mysqli so leaving it away for now.
Diffstat (limited to 'ext/mysqli/mysqli_api.c')
-rw-r--r-- | ext/mysqli/mysqli_api.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 43eb19347c..1dcaec2a5d 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -250,12 +250,16 @@ PHP_FUNCTION(mysqli_stmt_bind_result) } bind = (MYSQL_BIND *)ecalloc(var_cnt, sizeof(MYSQL_BIND)); - stmt->result.buf = (VAR_BUFFER *)ecalloc(var_cnt,sizeof(VAR_BUFFER)); - stmt->result.is_null = (char *)ecalloc(var_cnt, sizeof(char)); + { + int size; + char *p= emalloc(size= var_cnt * (sizeof(char) + sizeof(VAR_BUFFER))); + stmt->result.buf = (VAR_BUFFER *) p; + stmt->result.is_null = p + var_cnt * sizeof(VAR_BUFFER); + memset(p, 0, size); + } for (i=start; i < var_cnt + start ; i++) { ofs = i - start; - stmt->result.is_null[ofs] = 0; col_type = (stmt->stmt->fields) ? stmt->stmt->fields[ofs].type : MYSQL_TYPE_STRING; switch (col_type) { @@ -373,8 +377,8 @@ PHP_FUNCTION(mysqli_stmt_bind_result) efree(stmt->result.buf[i].val); } } + /* Don't free stmt->result.is_null because is_null & buf are one block of memory */ efree(stmt->result.buf); - efree(stmt->result.is_null); RETVAL_FALSE; } else { stmt->result.var_cnt = var_cnt; |