summaryrefslogtreecommitdiff
path: root/main/db.c
diff options
context:
space:
mode:
authorTilghman Lesher <tilghman@meg.abyt.es>2009-03-17 05:51:54 +0000
committerTilghman Lesher <tilghman@meg.abyt.es>2009-03-17 05:51:54 +0000
commit3e22e8bc9412f5461c13dda286ff83f28fda2f8a (patch)
treef4121d3ec8911a8927de496b6218552b42a14d1e /main/db.c
parent7cfc92cc32746747495f74bea65d057c3a856546 (diff)
Merged revisions 182449 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r182449 | tilghman | 2009-03-17 00:50:52 -0500 (Tue, 17 Mar 2009) | 7 lines Fix race in astdb The underlying db1 implementation does not fully isolate the pages retrieved from astdb, so the lock protecting accesses needs to be extended until the copy from the shared memory structure is done. (closes issue #14682) Reported by: makoto ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@182450 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/db.c')
-rw-r--r--main/db.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/main/db.c b/main/db.c
index 46601dc41..6528aa246 100644
--- a/main/db.c
+++ b/main/db.c
@@ -180,10 +180,8 @@ int ast_db_get(const char *family, const char *keys, char *value, int valuelen)
memset(value, 0, valuelen);
key.data = fullkey;
key.size = fullkeylen + 1;
-
+
res = astdb->get(astdb, &key, &data, 0);
-
- ast_mutex_unlock(&dblock);
/* Be sure to NULL terminate our data either way */
if (res) {
@@ -200,6 +198,11 @@ int ast_db_get(const char *family, const char *keys, char *value, int valuelen)
ast_log(LOG_NOTICE, "Strange, empty value for /%s/%s\n", family, keys);
}
}
+
+ /* Data is not fully isolated for concurrency, so the lock must be extended
+ * to after the copy to the output buffer. */
+ ast_mutex_unlock(&dblock);
+
return res;
}