note 92772 rejected from function.shm-put-var by danbrown
| From: | danbrown@php.net | Date: | Sun, 09 Aug 2009 18:03:32 +0000 |
| Subject: | note 92772 rejected from function.shm-put-var by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-159251@lists.php.net to get a copy of this message | ||
Note Submitter: ant_mail you_know_symbol inbox dot ru
----
shm_put_var will remove specified var if there is not enough memory.
To prevent this use this patch:
--- ext/sysvshm/sysvshm.c.orig Sat Aug 8 13:22:18 2009
+++ ext/sysvshm/sysvshm.c Sat Aug 8 13:36:45 2009
@@ -371,13 +371,17 @@
* inserts an ascii-string into shared memory */
static int php_put_shm_data(sysvshm_chunk_head *ptr, long key, char *data, long len)
{
- sysvshm_chunk *shm_var;
+ sysvshm_chunk *shm_var, *chunk_ptr;
long total_size;
long shm_varpos;
total_size = ((long) (len + sizeof(sysvshm_chunk) - 1) / 4) * 4 + 4; /* 4-byte alligment */
if ((shm_varpos = php_check_shm_data(ptr, key)) > 0) {
+
+ /* remove current data only if we can allocate new data */
+ chunk_ptr = (sysvshm_chunk *) ((char *) ptr + shm_varpos);
+ if (chunk_ptr->length + ptr->free > total_size)
php_remove_shm_data(ptr, shm_varpos);
}