mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Fix #78538: shmop memory leak
If the descriptor's refcount drops to zero, we have to unmap the respective file view, to avoid leaking memory.
This commit is contained in:
parent
b48f2625b5
commit
18172303f4
2 changed files with 10 additions and 1 deletions
3
NEWS
3
NEWS
|
@ -39,6 +39,9 @@ PHP NEWS
|
||||||
. Fixed bug #78982 (pdo_pgsql returns dead persistent connection). (SATŌ
|
. Fixed bug #78982 (pdo_pgsql returns dead persistent connection). (SATŌ
|
||||||
Kentarō)
|
Kentarō)
|
||||||
|
|
||||||
|
- Shmop:
|
||||||
|
. Fixed bug #78538 (shmop memory leak). (cmb)
|
||||||
|
|
||||||
18 Dec 2019, PHP 7.3.13
|
18 Dec 2019, PHP 7.3.13
|
||||||
|
|
||||||
- Bcmath:
|
- Bcmath:
|
||||||
|
|
|
@ -721,6 +721,7 @@ TSRM_API void *shmat(int key, const void *shmaddr, int flags)
|
||||||
TSRM_API int shmdt(const void *shmaddr)
|
TSRM_API int shmdt(const void *shmaddr)
|
||||||
{/*{{{*/
|
{/*{{{*/
|
||||||
shm_pair *shm = shm_get(0, (void*)shmaddr);
|
shm_pair *shm = shm_get(0, (void*)shmaddr);
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!shm->segment) {
|
if (!shm->segment) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -730,7 +731,12 @@ TSRM_API int shmdt(const void *shmaddr)
|
||||||
shm->descriptor->shm_lpid = getpid();
|
shm->descriptor->shm_lpid = getpid();
|
||||||
shm->descriptor->shm_nattch--;
|
shm->descriptor->shm_nattch--;
|
||||||
|
|
||||||
return UnmapViewOfFile(shm->addr) ? 0 : -1;
|
ret = UnmapViewOfFile(shm->addr) ? 0 : -1;
|
||||||
|
if (!ret && shm->descriptor->shm_nattch <= 0) {
|
||||||
|
ret = UnmapViewOfFile(shm->descriptor) ? 0 : -1;
|
||||||
|
shm->descriptor = NULL;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}/*}}}*/
|
}/*}}}*/
|
||||||
|
|
||||||
TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf)
|
TSRM_API int shmctl(int key, int cmd, struct shmid_ds *buf)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue