[Bug 648199] New: pad: potential deadlock / crash when freeing cache

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Tue Apr 19 05:10:10 PDT 2011


https://bugzilla.gnome.org/show_bug.cgi?id=648199
  GStreamer | gstreamer (core) | git

           Summary: pad: potential deadlock / crash when freeing cache
    Classification: Platform
           Product: GStreamer
           Version: git
        OS/Version: All
            Status: UNCONFIRMED
          Severity: blocker
          Priority: Normal
         Component: gstreamer (core)
        AssignedTo: gstreamer-bugs at lists.freedesktop.org
        ReportedBy: havard.graff at tandberg.com
         QAContact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---


Created an attachment (id=186272)
 View: https://bugzilla.gnome.org/attachment.cgi?id=186272
 Review: https://bugzilla.gnome.org/review?bug=648199&attachment=186272

patch

We have had this callstack lately:
     libglib-2.0-0.dll!g_logv(const char * log_domain=0x74fd853c,
GLogLevelFlags log_level=G_LOG_LEVEL_ERROR, const char * format=0x74fd8ec8,
char * args1=0x0332e914)  Line 554 + 0x8 bytes    C
     libglib-2.0-0.dll!g_log(const char * log_domain=0x74fd853c, GLogLevelFlags
log_level=G_LOG_LEVEL_ERROR, const char * format=0x74fd8ec8, ...)  Line 599 +
0x15 bytes    C
     libgthread-2.0-0.dll!g_mutex_free_errorcheck_impl(_GMutex *
mutex=0x03747460, const unsigned long magic=0xf8e18ad7, char * const
location=0x6ddeabb8)  Line 179 + 0x1b bytes    C
     libglib-2.0-0.dll!g_static_mutex_free(_GMutex * * mutex=0x02924450)  Line
1388 + 0x21 bytes    C
     libglib-2.0-0.dll!g_static_rec_mutex_free(_GStaticRecMutex *
mutex=0x02924450)  Line 1627 + 0x9 bytes    C
     libgstreamer-0.10-0.dll!gst_pad_finalize(_GObject * object=0x02925370) 
Line 461 + 0xc bytes    C
     libgobject-2.0-0.dll!g_object_unref(void * _object=0x02925370)  Line 2726
+ 0x10 bytes    C
     libgstreamer-0.10-0.dll!gst_object_unref(void * object=0x02925370)  Line
338 + 0x9 bytes    C
     libgstreamer-0.10-0.dll!pad_free_cache(_GstPadPushCache *
cache=0x028e7220)  Line 4598 + 0xb bytes    C
>	libgstreamer-0.10-0.dll!gst_pad_push(_GstPad * pad=0x029215b8, _GstBuffer * buffer=0x028965d8)  Line 4746 + 0x9 bytes	C
     libgstreamer-0.10-0.dll!gst_proxy_pad_do_chain(_GstPad * pad=0x02922538,
_GstBuffer * buffer=0x028965d8)  Line 171 + 0xd bytes    C
     libgstreamer-0.10-0.dll!gst_pad_push(_GstPad * pad=0x02895360, _GstBuffer
* buffer=0x028965d8)  Line 4709 + 0x15 bytes    C
     libgstrtpmanager.dll!gst_rtp_session_send_rtcp(_RTPSession *
sess=0x028ea530, _RTPSource * src=0x03688650, _GstBuffer * buffer=0x028965d8,
int eos=0x00000000, void * user_data=0x028e91c8)  Line 1065 + 0xd bytes    C
     libgstrtpmanager.dll!rtp_session_on_timeout(_RTPSession * sess=0x028ea530,
unsigned __int64 current_time=0x00000d5b4710c822, unsigned __int64
ntpnstime=0x30bca2f8816a4a00, unsigned __int64 running_time=0x00000d5b4710d72c)
 Line 3378 + 0x58 bytes    C
     libgstrtpmanager.dll!rtcp_thread(_GstRtpSession * rtpsession=0x028e91c8) 
Line 853 + 0x21 bytes    C
     libglib-2.0-0.dll!g_thread_create_proxy(void * data=0x00a3d050)  Line 1955
+ 0x10 bytes    C
     libgthread-2.0-0.dll!g_thread_proxy(void * data=0x028cb320)  Line 509 +
0x10 bytes    C

As you can see, the pad_free_cache is trying to free a mutex that is being
held. The solution is simply to unlock that lock (stream-lock) before freeing
the cache.

-- 
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list