X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pintos-anon;a=blobdiff_plain;f=doc%2Fthreads.texi;h=b13b5450ff00802e06fa346894a6955ece891f4e;hp=377343d77323a114becf54644c9e011857e78d00;hb=8b805d179d0bd022182491d91584280a83eb451d;hpb=0fd3a243b790dd1cfc9e0a40c57dddde56cf344d diff --git a/doc/threads.texi b/doc/threads.texi index 377343d..b13b545 100644 --- a/doc/threads.texi +++ b/doc/threads.texi @@ -770,6 +770,36 @@ becomes the higher of the newly set priority or the highest donated priority. When the donations are released, the thread's priority becomes the one set through the function call. This behavior is checked by the @code{priority-donate-lower} test. + +@item Doubled test names in output make them fail. + +Suppose you are seeing output in which some test names are doubled, +like this: + +@example +(alarm-priority) begin +(alarm-priority) (alarm-priority) Thread priority 30 woke up. +Thread priority 29 woke up. +(alarm-priority) Thread priority 28 woke up. +@end example + +What is happening is that output from two threads is being +interleaved. That is, one thread is printing @code{"(alarm-priority) +Thread priority 29 woke up.\n"} and another thread is printing +@code{"(alarm-priority) Thread priority 30 woke up.\n"}, but the first +thread is being preempted by the second in the middle of its output. + +This problem indicates a bug in your priority scheduler. After all, a +thread with priority 29 should not be able to run while a thread with +priority 30 has work to do. + +Normally, the implementation of the @code{printf()} function in the +Pintos kernel attempts to prevent such interleaved output by acquiring +a console lock during the duration of the @code{printf} call and +releasing it afterwards. However, the output of the test name, +e.g., @code{(alarm-priority)}, and the message following it is output +using two calls to @code{printf}, resulting in the console lock being +acquired and released twice. @end table @node Advanced Scheduler FAQ