[asterisk-commits] tilghman: trunk r182450 - in /trunk: ./ main/db.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Mar 17 00:51:58 CDT 2009


Author: tilghman
Date: Tue Mar 17 00:51:54 2009
New Revision: 182450

URL: http://svn.digium.com/svn-view/asterisk?view=rev&rev=182450
Log:
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
........

Modified:
    trunk/   (props changed)
    trunk/main/db.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Modified: trunk/main/db.c
URL: http://svn.digium.com/svn-view/asterisk/trunk/main/db.c?view=diff&rev=182450&r1=182449&r2=182450
==============================================================================
--- trunk/main/db.c (original)
+++ trunk/main/db.c Tue Mar 17 00:51:54 2009
@@ -180,10 +180,8 @@
 	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 @@
 			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;
 }
 




More information about the asterisk-commits mailing list