Module Name:    src
Committed By:   christos
Date:           Wed Apr 11 18:33:48 UTC 2018

Modified Files:
        src/external/apache2/mDNSResponder/dist/mDNSCore: DNSCommon.c
            DNSCommon.h mDNSEmbeddedAPI.h

Log Message:
Add the location of the last lock to help debugging.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 \
    src/external/apache2/mDNSResponder/dist/mDNSCore/DNSCommon.c \
    src/external/apache2/mDNSResponder/dist/mDNSCore/mDNSEmbeddedAPI.h
cvs rdiff -u -r1.1.1.5 -r1.2 \
    src/external/apache2/mDNSResponder/dist/mDNSCore/DNSCommon.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/apache2/mDNSResponder/dist/mDNSCore/DNSCommon.c
diff -u src/external/apache2/mDNSResponder/dist/mDNSCore/DNSCommon.c:1.8 src/external/apache2/mDNSResponder/dist/mDNSCore/DNSCommon.c:1.9
--- src/external/apache2/mDNSResponder/dist/mDNSCore/DNSCommon.c:1.8	Sun Jan 14 15:04:55 2018
+++ src/external/apache2/mDNSResponder/dist/mDNSCore/DNSCommon.c	Wed Apr 11 14:33:48 2018
@@ -3838,7 +3838,7 @@ mDNSexport mStatus mDNSSendDNSMessage(mD
 #pragma mark - RR List Management & Task Management
 #endif
 
-mDNSexport void mDNS_Lock_(mDNS *const m, const char * const functionname)
+mDNSexport void mDNS_Lock_(mDNS *const m, const char * const functionname, int lineno)
 {
     // MUST grab the platform lock FIRST!
     mDNSPlatformLock(m);
@@ -3848,20 +3848,20 @@ mDNSexport void mDNS_Lock_(mDNS *const m
     // If that client callback does mDNS API calls, mDNS_reentrancy and mDNS_busy will both be one
     // If mDNS_busy != mDNS_reentrancy that's a bad sign
     if (m->mDNS_busy != m->mDNS_reentrancy)
-        LogFatalError("%s: mDNS_Lock: Locking failure! mDNS_busy (%ld) != mDNS_reentrancy (%ld)", functionname, m->mDNS_busy, m->mDNS_reentrancy);
+        LogFatalError("%s,%d: mDNS_Lock: Locking failure! mDNS_busy (%ld) != mDNS_reentrancy (%ld) (last %s,%d)", functionname, lineno, m->mDNS_busy, m->mDNS_reentrancy, m->mDNS_Lock_functionname, m->mDNS_Lock_lineno);
 
     // If this is an initial entry into the mDNSCore code, set m->timenow
     // else, if this is a re-entrant entry into the mDNSCore code, m->timenow should already be set
     if (m->mDNS_busy == 0)
     {
         if (m->timenow)
-            LogMsg("%s: mDNS_Lock: m->timenow already set (%ld/%ld)", functionname, m->timenow, mDNS_TimeNow_NoLock(m));
+            LogMsg("%s,%d: mDNS_Lock: m->timenow already set (%ld/%ld)", functionname, lineno, m->timenow, mDNS_TimeNow_NoLock(m));
         m->timenow = mDNS_TimeNow_NoLock(m);
         if (m->timenow == 0) m->timenow = 1;
     }
     else if (m->timenow == 0)
     {
-        LogMsg("%s: mDNS_Lock: m->mDNS_busy is %ld but m->timenow not set", functionname, m->mDNS_busy);
+        LogMsg("%s,%d: mDNS_Lock: m->mDNS_busy is %ld but m->timenow not set", functionname, lineno, m->mDNS_busy);
         m->timenow = mDNS_TimeNow_NoLock(m);
         if (m->timenow == 0) m->timenow = 1;
     }
@@ -3869,13 +3869,15 @@ mDNSexport void mDNS_Lock_(mDNS *const m
     if (m->timenow_last - m->timenow > 0)
     {
         m->timenow_adjust += m->timenow_last - m->timenow;
-        LogMsg("%s: mDNSPlatformRawTime went backwards by %ld ticks; setting correction factor to %ld", functionname, m->timenow_last - m->timenow, m->timenow_adjust);
+        LogMsg("%s,%d: mDNSPlatformRawTime went backwards by %ld ticks; setting correction factor to %ld", functionname, lineno, m->timenow_last - m->timenow, m->timenow_adjust);
         m->timenow = m->timenow_last;
     }
     m->timenow_last = m->timenow;
 
     // Increment mDNS_busy so we'll recognise re-entrant calls
     m->mDNS_busy++;
+    m->mDNS_Lock_functionname = functionname;
+    m->mDNS_Lock_lineno = lineno;
 }
 
 mDNSlocal AuthRecord *AnyLocalRecordReady(const mDNS *const m)
@@ -4011,20 +4013,21 @@ mDNSexport void ShowTaskSchedulingError(
     mDNS_Unlock(m);
 }
 
-mDNSexport void mDNS_Unlock_(mDNS *const m, const char *const functionname)
+mDNSexport void mDNS_Unlock_(mDNS *const m, const char *const functionname, int lineno)
 {
     // Decrement mDNS_busy
     m->mDNS_busy--;
 
     // Check for locking failures
     if (m->mDNS_busy != m->mDNS_reentrancy)
-        LogFatalError("%s: mDNS_Unlock: Locking failure! mDNS_busy (%ld) != mDNS_reentrancy (%ld)", functionname, m->mDNS_busy, m->mDNS_reentrancy);
+        LogFatalError("%s,%d: mDNS_Unlock: Locking failure! mDNS_busy (%ld) != mDNS_reentrancy (%ld) (last %s,%d)", functionname, lineno, m->mDNS_busy,
+	    m->mDNS_reentrancy, m->mDNS_Lock_functionname, m->mDNS_Lock_lineno);
 
     // If this is a final exit from the mDNSCore code, set m->NextScheduledEvent and clear m->timenow
     if (m->mDNS_busy == 0)
     {
         m->NextScheduledEvent = GetNextScheduledEvent(m);
-        if (m->timenow == 0) LogMsg("%s: mDNS_Unlock: ERROR! m->timenow aready zero", functionname);
+        if (m->timenow == 0) LogMsg("%s,%d: mDNS_Unlock: ERROR! m->timenow aready zero", functionname, lineno);
         m->timenow = 0;
     }
 
Index: src/external/apache2/mDNSResponder/dist/mDNSCore/mDNSEmbeddedAPI.h
diff -u src/external/apache2/mDNSResponder/dist/mDNSCore/mDNSEmbeddedAPI.h:1.8 src/external/apache2/mDNSResponder/dist/mDNSCore/mDNSEmbeddedAPI.h:1.9
--- src/external/apache2/mDNSResponder/dist/mDNSCore/mDNSEmbeddedAPI.h:1.8	Sun Feb 25 15:04:56 2018
+++ src/external/apache2/mDNSResponder/dist/mDNSCore/mDNSEmbeddedAPI.h	Wed Apr 11 14:33:48 2018
@@ -2319,6 +2319,8 @@ struct mDNS_struct
     // For debugging: To catch and report locking failures
     mDNSu32 mDNS_busy;                  // Incremented between mDNS_Lock/mDNS_Unlock section
     mDNSu32 mDNS_reentrancy;            // Incremented when calling a client callback
+    const char *mDNS_Lock_functionname;		// Where was the last lock taken
+    int	mDNS_Lock_lineno;				// and line number:
     mDNSu8 lock_rrcache;                // For debugging: Set at times when these lists may not be modified
     mDNSu8 lock_Questions;
     mDNSu8 lock_Records;

Index: src/external/apache2/mDNSResponder/dist/mDNSCore/DNSCommon.h
diff -u src/external/apache2/mDNSResponder/dist/mDNSCore/DNSCommon.h:1.1.1.5 src/external/apache2/mDNSResponder/dist/mDNSCore/DNSCommon.h:1.2
--- src/external/apache2/mDNSResponder/dist/mDNSCore/DNSCommon.h:1.1.1.5	Sun Jan 14 14:40:51 2018
+++ src/external/apache2/mDNSResponder/dist/mDNSCore/DNSCommon.h	Wed Apr 11 14:33:48 2018
@@ -288,16 +288,16 @@ extern mStatus mDNSSendDNSMessage(mDNS *
 #endif
 
 extern void ShowTaskSchedulingError(mDNS *const m);
-extern void mDNS_Lock_(mDNS *const m, const char * const functionname);
-extern void mDNS_Unlock_(mDNS *const m, const char * const functionname);
+extern void mDNS_Lock_(mDNS *const m, const char * const functionname, int lineno);
+extern void mDNS_Unlock_(mDNS *const m, const char * const functionname, int lineno);
 
 #if defined(_WIN32)
  #define __func__ __FUNCTION__
 #endif
 
-#define mDNS_Lock(X) mDNS_Lock_((X), __func__)
+#define mDNS_Lock(X) mDNS_Lock_((X), __func__, __LINE__)
 
-#define mDNS_Unlock(X) mDNS_Unlock_((X), __func__)
+#define mDNS_Unlock(X) mDNS_Unlock_((X), __func__, __LINE__)
 
 #define mDNS_CheckLock(X) \
     if ((X)->mDNS_busy != (X)->mDNS_reentrancy+1) LogMsg("%s: Lock not held! mDNS_busy (%ld) mDNS_reentrancy (%ld)", __func__, (X)->mDNS_busy, (X)->mDNS_reentrancy)

Reply via email to