> 1. Why is the number bumped up by 2 every time someone waits on the lock?
This field is a combination of a bit flag and counter. The bit flag is the lowest bit, the counter is the rest. > 2. What is the meaning of doing (state - 2) | 1) - and why? This decrements the counter and sets the flag. > 3. How do I translate the MonitorHeld column in the !SyncBlk command? Do I assume that every 2 incrememnt after 1 corresponds to some guy waiting? Correct. -Jan -----Original Message----- From: Discussion of the Rotor Shared Source CLI implementation [mailto:[EMAIL PROTECTED] On Behalf Of Sriram Krishnan Sent: Saturday, October 16, 2004 11:32 PM To: [EMAIL PROTECTED] Subject: [DOTNET-ROTOR] Explanation of AwareLock's m_MonitorHeld While debugging with the SOS extension, I used the SyncBlk command and got the following output. 0:003> !SyncBlk Index SyncBlock MonitorHeld Recursion Thread ThreadID Object Waiting 3 0016f634 3 1 161a50 910 4 00aa1bac System.Object Waiting threads: 4 0016f660 3 1 161888 d08 3 00aa1ba0 System.Object Waiting threads: I was curious to know what that MonitorHeld column was - and dug through the Rotor sos code and found that it mapped to the m_MonitorHeld of AwareLock. The lines of code that interest me are (in SyncBlk.cpp) FastInterlockCompareExchange((LONG*)&m_MonitorHeld, state + 2, state) (which gets executed whenever tries to acquire a lock) And FastInterlockCompareExchange((LONG*)&m_MonitorHeld, state - 2, state) (inside AwareLock::EnterEpilog) Whenever you get a new guy waiting on the lock, the state variable (which is the same as the m_MonitorHeld) gets bumped up by 2 and bumped back down by 2 whenever someone stops waiting. When someone *does* acquire the lock, the code executed is (FastInterlockCompareExchange((LONG*)&m_MonitorHeld, ((state - 2) | 1), state). Now, here are my questions 1. Why is the number bumped up by 2 every time someone waits on the lock? 2. What is the meaning of doing (state - 2) | 1) - and why? 3. How do I translate the MonitorHeld column in the !SyncBlk command? Do I assume that every 2 incrememnt after 1 corresponds to some guy waiting? Thanks in advance, Sriram ------------------------------------------------------------------------ ---- - I blog at http://www.dotnetjunkies.com/weblog/sriram ------------------------------------------------------------------------ ---- =================================== This list is hosted by DevelopMentor(r) http://www.develop.com ASP.NET courses you may be interested in: Guerrilla.NET Sept 27-Oct 1, in Torrance http://www.develop.com/courses/gdotnetls Essential.NET Sept 20-24, in San Francisco Essential.NET Oct. 4-8, in London http://www.develop.com/courses/edotnet View archives and manage your subscription(s) at http://discuss.develop.com =================================== This list is hosted by DevelopMentorŪ http://www.develop.com ASP.NET courses you may be interested in: Guerrilla.NET Sept 27-Oct 1, in Torrance http://www.develop.com/courses/gdotnetls Essential.NET Sept 20-24, in San Francisco Essential.NET Oct. 4-8, in London http://www.develop.com/courses/edotnet View archives and manage your subscription(s) at http://discuss.develop.com