summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-12-22 11:38:32 -0500
committerUlrich Drepper <drepper@gmail.com>2011-12-22 11:38:32 -0500
commit41043168619f1bcb12a718792b052703b9d69e91 (patch)
tree6294b149f293472d4a91b50f4d4451c6bd59d70a
parentb7763303bfe01853eb4b5d034414e445e8c6a7b5 (diff)
downloadglibc-41043168619f1bcb12a718792b052703b9d69e91.tar.gz
glibc-41043168619f1bcb12a718792b052703b9d69e91.tar.xz
glibc-41043168619f1bcb12a718792b052703b9d69e91.zip
Optimize tr_freehook
-rw-r--r--ChangeLog4
-rw-r--r--NEWS6
-rw-r--r--malloc/mtrace.c8
3 files changed, 12 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index b8ea695e1b..0544a052eb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2011-12-22  Ulrich Drepper  <drepper@gmail.com>
 
+	[BZ #13328]
+	* malloc/mtrace.c (tr_freehook): Avoid unnecessary unlock/lock.
+	Proposed by Mariusz_Cukr <marcukr@op.pl>.
+
 	* sysdeps/x86_64/fpu/bits/fenv.h: Use __REDIRECT_NTH for
 	__feraiseexcept_renamed.
 
diff --git a/NEWS b/NEWS
index bdf996eafa..a10415d1a3 100644
--- a/NEWS
+++ b/NEWS
@@ -12,9 +12,9 @@ Version 2.15
   6779, 6783, 9696, 10103, 10709, 11589, 12403, 12847, 12868, 12852, 12874,
   12885, 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090,
   13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13179, 13192,
-  13268, 13276, 13291, 13305, 13335, 13337, 13344, 13358, 13367, 13413,
-  13416, 13423, 13439, 13446, 13472, 13484, 13506, 13515, 13523, 13524,
-  13538
+  13268, 13276, 13291, 13305, 13328, 13335, 13337, 13344, 13358, 13367,
+  13413, 13416, 13423, 13439, 13446, 13472, 13484, 13506, 13515, 13523,
+  13524, 13538
 
 * New program pldd to list loaded object of a process
   Implemented by Ulrich Drepper.
diff --git a/malloc/mtrace.c b/malloc/mtrace.c
index b55449f1ea..0d0cb35ff3 100644
--- a/malloc/mtrace.c
+++ b/malloc/mtrace.c
@@ -146,10 +146,12 @@ tr_freehook (ptr, caller)
   tr_where (caller, info);
   /* Be sure to print it first.  */
   fprintf (mallstream, "- %p\n", ptr);
-  __libc_lock_unlock (lock);
   if (ptr == mallwatch)
-    tr_break ();
-  __libc_lock_lock (lock);
+    {
+      __libc_lock_unlock (lock);
+      tr_break ();
+      __libc_lock_lock (lock);
+    }
   __free_hook = tr_old_free_hook;
   if (tr_old_free_hook != NULL)
     (*tr_old_free_hook) (ptr, caller);