On Mon, 2009-04-13 at 13:24 -0400, Dale Worley wrote:
> On Mon, 2009-04-13 at 09:36 -0400, Joly, Robert (CAR:9D30) wrote:
> > > To fix this, I've written a patch that generates the 
> > > temporary file name using mktemp().  This ensures that two 
> > > process that try to write the XML file at the same time will 
> > > use different temporary file names.  Of course, one of those 
> > > files (the one that is renamed last) will become the new XML 
> > > file, but that is OK.
> > 
> > Interesting.  Does it mean that the second process to perform the rename
> > may overwrite (lose) the changes made by the first?
> 
> Depending on race conditions, various things can happen.  But the XML
> file that remains afterward is the version that was written by one of
> the processes.  And since the processes all see consistent versions of
> the IMDB and they lock the table for the duration of writing their new
> XML files, each written version of the XML file is a correct
> representation of the IMDB table at some particular moment.  So it is
> possible that process A starts writing its file before process B starts
> writing its file, but that process A's version is the one the ultimately
> remains.  That would leave the final XML file a short time "older" than
> the XML file that process B wrote, but it would be the correct contents
> for that earlier instant.
> 
> Since we only write the XML file 20 seconds after the IMDB has been
> changed, we presumably can tolerate this situation.

More importantly - the only way it's even a slight problem is that the
odd race above happens so that a slightly out-of-date version exists for
20 seconds before the next update, _and_ the system crashes in that
window so that the old version is restored.  

The running processes never use the contents of the file directly, so
they always have a current version.


_______________________________________________
sipx-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipx-dev
Unsubscribe: http://list.sipfoundry.org/mailman/listinfo/sipx-dev

Reply via email to