diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2020-01-03 18:13:44 +0100 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2020-01-03 18:13:44 +0100 |
commit | d4927668bb7a57a7d0b651f3037f862e0ee720f2 (patch) | |
tree | 74a86908c38e1e3f775b29bba4602171abcd56ff /TSRM | |
parent | 7b4a4d2ace0015e6e7cc34f309edda91a8097d71 (diff) | |
parent | 4c6ad099c649b81d03a6593009565ecbd447ea10 (diff) | |
download | php-git-d4927668bb7a57a7d0b651f3037f862e0ee720f2.tar.gz |
Merge branch 'PHP-7.4'
* PHP-7.4:
Fix #78538: shmop memory leak
Diffstat (limited to 'TSRM')
-rw-r--r-- | TSRM/tsrm_win32.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/TSRM/tsrm_win32.c b/TSRM/tsrm_win32.c index 714542a853..5287bd23d6 100644 --- a/TSRM/tsrm_win32.c +++ b/TSRM/tsrm_win32.c @@ -718,6 +718,7 @@ TSRM_API void *shmat(int key, const void *shmaddr, int flags) TSRM_API int shmdt(const void *shmaddr) {/*{{{*/ shm_pair *shm = shm_get(0, (void*)shmaddr); + int ret; if (!shm->segment) { return -1; @@ -727,7 +728,12 @@ TSRM_API int shmdt(const void *shmaddr) shm->descriptor->shm_lpid = getpid(); 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) |