Message30596
Yes, I see what you mean. I had tried multiple flushes, but only
inside a single lock/unlock. But this means that in the no-truncate()
code path, even this is currently unsafe, as the lock is momentarily
released after flushing.
I think _toc should be regenerated after every lock(), as with the
risk of another process replacing/deleting/rearranging the messages,
it isn't valid to carry sequence numbers from one locked period to
another anyway, or from unlocked to locked. However, this runs the
risk of dangerously breaking code that thinks it is valid to do so,
even in the case where the mailbox was *not* modified (i.e. turning
possible failure into certain failure). For instance, if the program
removes message 1, then as things stand, the key "1" is no longer
used, and removing message 2 will remove the message that followed 1.
If _toc is regenerated in between, however (using the current code, so
that the messages are renumbered from 0), then the old message 2
becomes message 1, and removing message 2 will therefore remove the
wrong message. You'd also have things like pending deletions and
replacements (also unsafe generally) being forgotten. So it would
take some work to get right, if it's to work at all...
|
|
Date |
User |
Action |
Args |
2007-08-23 14:50:00 | admin | link | issue1599254 messages |
2007-08-23 14:50:00 | admin | create | |
|