Mercurial > hg > dmlib
changeset 2262:f92d4f056587
The return value of dmResourceRef() and dmResourceUnref() had a possibility
of being off by one due to a potential race condition. Fixed.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 17 Jun 2019 00:57:02 +0300 |
parents | e286454d305f |
children | 891acec47aa0 |
files | src/dmres.c |
diffstat | 1 files changed, 8 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dmres.c Mon Jun 17 00:55:07 2019 +0300 +++ b/src/dmres.c Mon Jun 17 00:57:02 2019 +0300 @@ -1014,22 +1014,26 @@ int dmResourceRef(DMResource *node) { + int res; + dmLockLibMutex(node->lib); node->atime = time(NULL); - node->refcount++; + res = ++node->refcount; dmUnlockLibMutex(node->lib); - return node->refcount; + return res; } int dmResourceUnref(DMResource *node) { + int res; + dmLockLibMutex(node->lib); - node->refcount--; + res = --node->refcount; dmUnlockLibMutex(node->lib); - return node->refcount; + return res; }