Last updated August 7, 2009.
~~~~~~~~~~~~~~~~~~~~~~~~~~


The DRD tool
~~~~~~~~~~~~
- Improve the code for suppressing races reported on glibc FILE objects, e.g. by
  intercepting all operations on FILE objects and by associating mutex semantics
  with FILE objects. Verify that races on unsynchronized *_unlocked() operations
  are reported. Remove FILE-I/O suppression patterns from glibc-2.X-drd.supp.
  See also http://www.unix.org/whitepapers/reentrant.html.
- Add locking order checking. Start from the following information:
  * http://sourceforge.net/mailarchive/message.php?msg_id=alpine.LNX.1.10.0803270822080.17890%40mudge.stoecker.eu
  * http://lwn.net/Articles/185605/
  * http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/lockdep-design.txt;h=488773018152056ea159685e732e42452a7ae142;hb=HEAD
- Make sure tc14_laog_dinphils is run during drd regression tests
  (only possible after locking order checking is implemented).
- Evaluate whether integration of drd with one of the available Valgrind GUI's
  makes sense (http://valgrind.org/downloads/guis.html).


Testing
~~~~~~~
- Measure the performance and the memory overhead of drd on the PARSEC
  benchmark (http://parsec.cs.princeton.edu/license.htm).
- Test with Synfig Studio (see also http://bugs.kde.org/show_bug.cgi?id=158555)
- Test with a multithreaded Python application.


Documentation
~~~~~~~~~~~~~
- Document the algorithms used in drd.
- Add comment on double checked locking.
- Add comment on lockless algorithms in general and circular buffers in
  particular.
- Explain how to handle transactions (with regard to locking order).
