package w3m
tag 352585 patch
thanks

Package: w3m
Version: 0.5.1-4
Followup-For: Bug #352585

The patch removes a deadlock from wrap_GC_warn_proc. This function maybe
called while GC has a lock on its internals, so calls to GC from within
wrap_GC_warn_proc can (will?) lead to a deadlock.
The messages will now be displayed where the cursor currently is but it
could be regarded as a bug in w3m if any such message appears.
In this case the message is:
"Repeated allocation of very large block (appr. size %ld):
 May lead to memory leak and poor performance."
I do not know how to avoid it though.

-- System Information:
Debian Release: testing/unstable
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.15
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)

Regards,
-- 
Karsten Schölzel        | Email:  [EMAIL PROTECTED]
Väderleden 9 4:98       | Jabber: [EMAIL PROTECTED]
97633 Luleå             | VoIP:   sip:[EMAIL PROTECTED]
Sweden                  |         sip:[EMAIL PROTECTED]
                        | Tel:    +4918015855857712
                        | Mobile: +46706725974
Many functions can NOT be used in wrap_GC_warn_proc because of possible
lock in GC. Warnings from GC should only appear in development and
otherwise regarded as bugs.

---
commit 488d2a9493ff726f5c23ec8cf8ac7148469dc23b
tree 2b9d97bad64a75fc22d11628254509e71f3b8ef4
parent 2c59d593b7d9a36d9c69e44d10741c2bde9252b3
author Karsten Schoelzel <[EMAIL PROTECTED]> Mon, 01 May 2006 12:46:18 +0200
committer Karsten Schoelzel <[EMAIL PROTECTED]> Mon, 01 May 2006 12:46:18 +0200

 main.c |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/main.c b/main.c
index ab0732a..0d709ef 100644
--- a/main.c
+++ b/main.c
@@ -293,10 +293,9 @@ wrap_GC_warn_proc(char *msg, GC_word arg
 
            for (; n > 0; --n, ++i) {
                i %= sizeof(msg_ring) / sizeof(msg_ring[0]);
-               disp_message_nsec(Sprintf
-                                 (msg_ring[i].msg,
-                                  (unsigned long)msg_ring[i].arg)->ptr, FALSE,
-                                 1, TRUE, FALSE);
+
+               printf(msg_ring[i].msg, (unsigned long)msg_ring[i].arg);
+               sleep_till_anykey(1, 1);
            }
 
            lock = 0;

Reply via email to