After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 316248 - linking two parallel chains hangs
linking two parallel chains hangs
Status: RESOLVED WONTFIX
Product: GStreamer
Classification: Platform
Component: gstreamer (core)
git master
Other Linux
: Normal normal
: git master
Assigned To: GStreamer Maintainers
GStreamer Maintainers
: 353725 413080 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2005-09-13 22:21 UTC by Stefan Sauer (gstreamer, gtkdoc dev)
Modified: 2010-09-17 14:00 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
selfcontained example (1.97 KB, text/plain)
2005-09-13 22:22 UTC, Stefan Sauer (gstreamer, gtkdoc dev)
Details

Description Stefan Sauer (gstreamer, gtkdoc dev) 2005-09-13 22:21:24 UTC
a pipeline like this hanges:

src -> tee +-> vol1 -+-> adder -> sink
           `-> vol2 -´

see attached example
Comment 1 Stefan Sauer (gstreamer, gtkdoc dev) 2005-09-13 22:22:08 UTC
Created attachment 52194 [details]
selfcontained example
Comment 2 Andy Wingo 2005-10-06 10:14:14 UTC
I'd like to get this test case into core, but we need to get aggregator ported
so that we have a "muxer" to use for testing.
Comment 3 Tim-Philipp Müller 2006-04-11 16:18:30 UTC
Ping? Any updates on this one?

Is this really supposed to work without queues?

The linking still deadlocks (when updated with s/sinesrc/audiotestsrc/):

Thread 1 (Thread -1213012288 (LWP 15898))

  • #0 __kernel_vsyscall
  • #1 __lll_mutex_lock_wait
    from /lib/tls/i686/cmov/libpthread.so.0
  • #2 _L_mutex_lock_33
    from /lib/tls/i686/cmov/libpthread.so.0
  • #3 ??
  • #4 gst_pad_get_type
    at gstpad.c line 188
  • #5 gst_pad_peer_get_caps
    at gstpad.c line 1950
  • #6 intersect_caps_func
    at gstutils.c line 2352
  • #7 gst_iterator_fold
    at gstiterator.c line 503
  • #8 gst_pad_proxy_getcaps
    at gstutils.c line 2398
  • #9 gst_pad_get_caps_unlocked
    at gstpad.c line 1836
  • #10 gst_pad_get_caps
    at gstpad.c line 1926
  • #11 gst_pad_peer_get_caps
    at gstpad.c line 1962
  • #12 gst_base_transform_getcaps
    at gstbasetransform.c line 533
  • #13 gst_pad_get_caps_unlocked
    at gstpad.c line 1836
  • #14 gst_pad_get_caps
    at gstpad.c line 1926
  • #15 gst_pad_peer_get_caps
    at gstpad.c line 1962
  • #16 intersect_caps_func
    at gstutils.c line 2352
  • #17 gst_iterator_fold
    at gstiterator.c line 503
  • #18 gst_pad_proxy_getcaps
    at gstutils.c line 2398
  • #19 gst_pad_get_caps_unlocked
    at gstpad.c line 1836
  • #20 gst_pad_get_caps
    at gstpad.c line 1926
  • #21 gst_pad_peer_get_caps
    at gstpad.c line 1962
  • #22 gst_base_transform_getcaps
    at gstbasetransform.c line 533
  • #23 gst_pad_get_caps_unlocked
    at gstpad.c line 1836
  • #24 gst_pad_link
    at gstpad.c line 1534
  • #25 pad_link_maybe_ghosting
    at gstutils.c line 1268
  • #26 gst_element_link_pads
    at gstutils.c line 1412
  • #27 gst_element_link_pads_filtered
    at gstutils.c line 1610
  • #28 gst_element_link
    at gstutils.c line 1629

Comment 4 Wim Taymans 2006-05-30 13:23:23 UTC
yep, it's supposed to work eventually when we support the GST_EVENT_BUFFERSIZE. It would go like this: tee sends a buffersize event on its source pads, one requesting a (sync) buffersize of 1, and on the other pad one requesting a (sync) size of 0. Adder then uses this to return from the chain function after queuing 1 buffer so that tee can push the other buffer. More complicated cases can be constructed requesting async scheduling (using a thread boundary etc).
Comment 5 Wim Taymans 2006-09-01 10:17:45 UTC
*** Bug 353725 has been marked as a duplicate of this bug. ***
Comment 6 Tim-Philipp Müller 2007-03-01 00:05:59 UTC
*** Bug 413080 has been marked as a duplicate of this bug. ***
Comment 7 Mathis Hofer 2007-03-01 08:10:27 UTC
Are there any news on this? Any ideas when it may be fixed (days, weeks, months)?
Comment 8 Wim Taymans 2007-03-01 08:47:49 UTC
more like months unless somebody wants to start working on it now and provide a patch.
Comment 9 Stefan Sauer (gstreamer, gtkdoc dev) 2007-05-21 17:04:42 UTC
I thought that queues should help, so I've tried this:

that of course works:
gst-launch audiotestsrc wave=2 freq=200 ! tee name=t ! volume ! adder name=a ! alsasink

this hangs (this is what I reported initialy);
gst-launch audiotestsrc wave=2 freq=200 ! tee name=t ! volume ! adder name=a ! alsasink t. ! volume ! a.

this still hangs:
gst-launch audiotestsrc wave=2 freq=200 ! tee name=t ! queue ! volume ! adder name=a ! alsasink t. ! queue ! volume ! a.

It already hangs during linking (thats why the queues won't help):
0:00:01.968371000 16711 0x804f070 DEBUG              default gstutils.c:2475:gst_pad_proxy_getcaps: proxying getcaps for t:src1
0:00:01.968434000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:2080:gst_pad_peer_get_caps:<t:src0> get peer caps
0:00:01.968496000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:2052:gst_pad_get_caps:<queue0:sink> get pad caps
0:00:01.968551000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:1958:gst_pad_get_caps_unlocked:<queue0:sink> get pad caps
0:00:01.968606000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:1962:gst_pad_get_caps_unlocked:<queue0:sink> dispatching to pad getcaps function
0:00:01.968663000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:2080:gst_pad_peer_get_caps:<queue0:src> get peer caps
0:00:01.968719000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:2052:gst_pad_get_caps:<volume0:sink> get pad caps
0:00:01.968773000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:1958:gst_pad_get_caps_unlocked:<volume0:sink> get pad caps
0:00:01.968828000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:1962:gst_pad_get_caps_unlocked:<volume0:sink> dispatching to pad getcaps function
0:00:01.968886000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:2080:gst_pad_peer_get_caps:<volume0:src> get peer caps
0:00:01.968942000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:2052:gst_pad_get_caps:<a:sink1> get pad caps
0:00:01.968996000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:1958:gst_pad_get_caps_unlocked:<a:sink1> get pad caps
0:00:01.969051000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:1962:gst_pad_get_caps_unlocked:<a:sink1> dispatching to pad getcaps function
0:00:01.969104000 16711 0x804f070 DEBUG              default gstutils.c:2475:gst_pad_proxy_getcaps: proxying getcaps for a:sink1
0:00:01.969164000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:2080:gst_pad_peer_get_caps:<a:sink0> get peer caps
0:00:01.969220000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:2052:gst_pad_get_caps:<volume1:src> get pad caps
0:00:01.969275000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:1958:gst_pad_get_caps_unlocked:<volume1:src> get pad caps
0:00:01.969330000 16711 0x804f070 DEBUG             GST_CAPS gstpad.c:1962:gst_pad_get_caps_unlocked:<volume1:src> dispatching to pad getcaps function

Comment 10 Stefan Sauer (gstreamer, gtkdoc dev) 2007-05-21 20:00:38 UTC
I've investigated this further. The root-problem is that both tee and adder are using gst_pad_proxy_getcaps(). Regarding gst_pad_proxy_getcaps() I wonder if this should use gst_element_iterate_[src|sink}_pads() depending on pad-direction rather that gst_element_iterate_pads(). I've tried it, but it doesn't solve the problem.

After adding more logging to intersect_caps_func() I notices that it hangs when calling gst_pad_peer_get_caps(). If I now look at the get_caps() function of the elements in question (basetransform and queue) that again calls gst_pad_peer_get_caps() and so it seems that the gst_pad_peer_get_caps() calls comming from tee and adder hit each other.

When apply this change in queue and basetransform:
+  if (GST_OBJECT_TRYLOCK(otherpad)) {
+    GST_OBJECT_UNLOCK (otherpad);
    result = gst_pad_peer_get_caps (otherpad);
+  }
+  else {
+    result=NULL;
+    GST_WARNING ("  lock problem for link %s:%s and %s:%s",
+      GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (otherpad));
+  }

I does not lock anymore, but it loops forever. What totally puzzles me is that I don't get the GST_WARNING() though.

Another attempt
-  result = gst_pad_peer_get_caps (otherpad);
+  {
+    GstPad *peerpad = GST_PAD_PEER (otherpad);
+    if(peerpad) {
+      result = gst_pad_get_caps (peerpad);
+    }
+    else result = NULL;
+  }
basically a nonblocking version of gst_pad_peer_get_caps(). As expected it does not block, but neither does it terminate - it loops forever too.

Conclussion for tonight. We seem to need a token to detect the cycle and somehow finish the negotiation for a subgraph, then try next branch and backtrack if it fails.
Comment 11 Wim Taymans 2007-07-03 11:54:18 UTC
The following patch at least fixes the case where queues are added after the tee. The other case probably could be fixed with the BUFFER event or by making collectpads just queue the 1 buffer instead of blocking on it.

        * gst/adder/gstadder.c: (gst_adder_sink_getcaps),
        (gst_adder_request_new_pad):
        Make getcaps more robust by not using the proxycaps function. This makes
        sure that we don't end up recursively calling getcaps upstream.
        See #316248.
Comment 12 Stefan Sauer (gstreamer, gtkdoc dev) 2008-06-22 17:04:31 UTC
I can still see it locking up:
http://rafb.net/p/3tsAX315.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211

	

  • #0 __kernel_vsyscall
  • #1 __lll_lock_wait
    from /lib/tls/i686/cmov/libpthread.so.0
  • #2 _L_lock_95
    from /lib/tls/i686/cmov/libpthread.so.0
  • #3 pthread_mutex_lock
    from /lib/tls/i686/cmov/libpthread.so.0
  • #4 gst_proxy_pad_get_target
    at gstghostpad.c line 367
  • #5 gst_proxy_pad_do_getcaps
    at gstghostpad.c line 224
  • #6 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #7 gst_pad_get_caps
    at gstpad.c line 2061
  • #8 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #9 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #10 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #11 gst_pad_get_caps
    at gstpad.c line 2061
  • #12 gst_proxy_pad_do_getcaps
    at gstghostpad.c line 230
  • #13 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #14 gst_pad_get_caps
    at gstpad.c line 2061
  • #15 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #16 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #17 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #18 gst_pad_get_caps
    at gstpad.c line 2061
  • #19 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #20 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #21 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #22 gst_pad_get_caps
    at gstpad.c line 2061
  • #23 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #24 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #25 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #26 gst_pad_get_caps
    at gstpad.c line 2061
  • #27 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #28 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #29 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #30 gst_pad_get_caps
    at gstpad.c line 2061
  • #31 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #32 ??
    from /usr/lib/gstreamer-0.10/libgstadder.so
  • #33 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #34 gst_pad_get_caps
    at gstpad.c line 2061
  • #35 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #36 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #37 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #38 gst_pad_get_caps
    at gstpad.c line 2061
  • #39 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #40 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #41 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #42 gst_pad_get_caps
    at gstpad.c line 2061
  • #43 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #44 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #45 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #46 gst_pad_get_caps
    at gstpad.c line 2061
  • #47 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #48 intersect_caps_func
    at gstutils.c line 2449
  • #49 gst_iterator_fold
    at gstiterator.c line 503
  • #50 gst_pad_proxy_getcaps
    at gstutils.c line 2497
  • #51 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #52 gst_pad_get_caps
    at gstpad.c line 2061
  • #53 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #54 gst_queue_getcaps
    at gstqueue.c line 446
  • #55 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #56 gst_pad_get_caps
    at gstpad.c line 2061
  • #57 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #58 intersect_caps_func
    at gstutils.c line 2449
  • #59 gst_iterator_fold
    at gstiterator.c line 503
  • #60 gst_pad_proxy_getcaps
    at gstutils.c line 2497
  • #61 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #62 gst_pad_get_caps
    at gstpad.c line 2061
  • #63 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #64 gst_queue_getcaps
    at gstqueue.c line 446
  • #65 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #66 gst_pad_get_caps
    at gstpad.c line 2061
  • #67 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #68 intersect_caps_func
    at gstutils.c line 2449
  • #69 gst_iterator_fold
    at gstiterator.c line 503
  • #70 gst_pad_proxy_getcaps
    at gstutils.c line 2497
  • #71 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #72 gst_pad_get_caps
    at gstpad.c line 2061
  • #73 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #74 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #75 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #76 gst_pad_get_caps
    at gstpad.c line 2061
  • #77 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #78 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #79 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #80 gst_pad_get_caps
    at gstpad.c line 2061
  • #81 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #82 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #83 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #84 gst_pad_get_caps
    at gstpad.c line 2061
  • #85 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #86 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #87 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #88 gst_pad_get_caps
    at gstpad.c line 2061
  • #89 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #90 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #91 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #92 gst_pad_get_caps
    at gstpad.c line 2061
  • #93 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #94 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #95 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #96 gst_pad_get_caps
    at gstpad.c line 2061
  • #97 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #98 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #99 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #100 gst_pad_get_caps
    at gstpad.c line 2061
  • #101 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #102 gst_queue_getcaps
    at gstqueue.c line 446
  • #103 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #104 gst_pad_get_caps
    at gstpad.c line 2061
  • #105 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #106 intersect_caps_func
    at gstutils.c line 2449
  • #107 gst_iterator_fold
    at gstiterator.c line 503
  • #108 gst_pad_proxy_getcaps
    at gstutils.c line 2497
  • #109 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #110 gst_pad_get_caps
    at gstpad.c line 2061
  • #111 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #112 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #113 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #114 gst_pad_get_caps
    at gstpad.c line 2061
  • #115 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #116 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #117 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #118 gst_pad_get_caps
    at gstpad.c line 2061
  • #119 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #120 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #121 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #122 gst_pad_get_caps
    at gstpad.c line 2061
  • #123 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #124 intersect_caps_func
    at gstutils.c line 2449
  • #125 gst_iterator_fold
    at gstiterator.c line 503
  • #126 gst_pad_proxy_getcaps
    at gstutils.c line 2497
  • #127 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #128 gst_pad_get_caps
    at gstpad.c line 2061
  • #129 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #130 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #131 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #132 gst_pad_get_caps
    at gstpad.c line 2061
  • #133 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #134 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #135 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #136 gst_pad_get_caps
    at gstpad.c line 2061
  • #137 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #138 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #139 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #140 gst_pad_get_caps
    at gstpad.c line 2061
  • #141 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #142 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #143 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #144 gst_pad_get_caps
    at gstpad.c line 2061
  • #145 gst_proxy_pad_do_getcaps
    at gstghostpad.c line 230
  • #146 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #147 gst_pad_get_caps
    at gstpad.c line 2061
  • #148 gst_pad_peer_get_caps
    at gstpad.c line 2101
  • #149 gst_base_transform_getcaps
    at gstbasetransform.c line 555
  • #150 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #151 gst_pad_get_caps
    at gstpad.c line 2061
  • #152 gst_proxy_pad_do_getcaps
    at gstghostpad.c line 230
  • #153 gst_pad_get_caps_unlocked
    at gstpad.c line 1977
  • #154 gst_pad_link
    at gstpad.c line 1647
  • #155 gst_ghost_pad_set_target
    at gstghostpad.c line 1066
  • #156 ??
    from /usr/lib/gstreamer-0.10/libgstautodetect.so
  • #157 ??
    from /usr/lib/gstreamer-0.10/libgstautodetect.so
  • #158 gst_element_change_state
    at gstelement.c line 2425
  • #159 gst_element_set_state_func
    at gstelement.c line 2375
  • #160 gst_element_set_state
    at gstelement.c line 2278
  • #161 gst_bin_change_state_func
    at gstbin.c line 1933
  • #162 gst_element_change_state
    at gstelement.c line 2425
  • #163 gst_element_set_state_func
    at gstelement.c line 2375
  • #164 gst_element_set_state
    at gstelement.c line 2278
  • #165 gst_bin_change_state_func
    at gstbin.c line 1933
  • #166 gst_pipeline_change_state
    at gstpipeline.c line 463
  • #167 gst_element_change_state
    at gstelement.c line 2425
  • #168 gst_element_set_state_func
    at gstelement.c line 2375
  • #169 gst_element_set_state
    at gstelement.c line 2278
  • #170 bt_song_stop
    at song.c line 784
  • #171 on_menu_stop_activate
    at main-menu.c line 420
  • #172 g_cclosure_marshal_VOID__VOID
    from /usr/lib/libgobject-2.0.so.0
  • #173 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #174 ??
    from /usr/lib/libgobject-2.0.so.0
  • #175 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #176 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #177 closure_accel_activate
    at /build/buildd/gtk+2.0-2.12.9/gtk/gtkwidget.c line 4091
  • #178 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #179 ??
    from /usr/lib/libgobject-2.0.so.0
  • #180 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #181 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #182 IA__gtk_accel_group_activate
    at /build/buildd/gtk+2.0-2.12.9/gtk/gtkaccelgroup.c line 739
  • #183 IA__gtk_accel_groups_activate
    at /build/buildd/gtk+2.0-2.12.9/gtk/gtkaccelgroup.c line 777
  • #184 IA__gtk_window_activate_key
    at /build/buildd/gtk+2.0-2.12.9/gtk/gtkwindow.c line 8006
  • #185 gtk_window_key_press_event
    at /build/buildd/gtk+2.0-2.12.9/gtk/gtkwindow.c line 4962
  • #186 _gtk_marshal_BOOLEAN__BOXED
    at /build/buildd/gtk+2.0-2.12.9/gtk/gtkmarshalers.c line 84
  • #187 ??
    from /usr/lib/libgobject-2.0.so.0
  • #188 g_closure_invoke
    from /usr/lib/libgobject-2.0.so.0
  • #189 ??
    from /usr/lib/libgobject-2.0.so.0
  • #190 g_signal_emit_valist
    from /usr/lib/libgobject-2.0.so.0
  • #191 g_signal_emit
    from /usr/lib/libgobject-2.0.so.0
  • #192 gtk_widget_event_internal
    at /build/buildd/gtk+2.0-2.12.9/gtk/gtkwidget.c line 4678
  • #193 IA__gtk_propagate_event
    at /build/buildd/gtk+2.0-2.12.9/gtk/gtkmain.c line 2310
  • #194 IA__gtk_main_do_event
    at /build/buildd/gtk+2.0-2.12.9/gtk/gtkmain.c line 1556
  • #195 gdk_event_dispatch
    at /build/buildd/gtk+2.0-2.12.9/gdk/x11/gdkevents-x11.c line 2351
  • #196 g_main_context_dispatch
    from /usr/lib/libglib-2.0.so.0
  • #197 ??
    from /usr/lib/libglib-2.0.so.0
  • #198 g_main_loop_run
    from /usr/lib/libglib-2.0.so.0
  • #199 IA__gtk_main
    at /build/buildd/gtk+2.0-2.12.9/gtk/gtkmain.c line 1163
  • #200 bt_main_window_run
    at main-window.c line 389
  • #201 bt_edit_application_run_ui
    at edit-application.c line 193
  • #202 bt_edit_application_run
    at edit-application.c line 467
  • #203 main
    at bt-edit.c line 147

Comment 13 Stefan Sauer (gstreamer, gtkdoc dev) 2008-06-28 17:35:01 UTC
Ignore that last comment (even though its big). This is a different issue and I opened Bug #540645 for that.
Comment 14 Wim Taymans 2009-12-11 17:28:33 UTC
Isn't this fixed now that proxy_getcaps does not reverse direction anymore?
Comment 15 Stefan Sauer (gstreamer, gtkdoc dev) 2010-01-02 22:03:05 UTC
well this hangs in "Pipeline is PREROLLING ..."
gst-launch audiotestsrc ! tee name=t ! volume ! adder name=m ! pulsesink t. ! volume ! m.

and this works:
gst-launch audiotestsrc ! tee name=t ! volume ! adder name=m ! pulsesink t. ! queue ! volume ! m.


interesting is also this one:
gst-launch audiotestsrc is-live=true ! tee name=t ! volume ! adder name=m ! pulsesink t. ! volume ! m.
it goes to PLAYING, but does not play anything
Comment 16 Thiago Sousa Santos 2010-01-04 14:17:46 UTC
AFAIK collectpads of adder blocks the chain function of tee when it receives the first buffer waiting for all pads to have buffers.

But tee's chain function thread is blocked on collectpads and no more buffers are pushed to the other chain.
Comment 17 Tobias Mueller 2010-02-19 18:55:59 UTC
Reopening as the question in comment #14 has been answered in comment #15.
Comment 18 Edward Hervey 2010-07-16 09:52:46 UTC
Stefan, can you try again with latest core ?
Comment 19 Tobias Mueller 2010-09-05 02:32:03 UTC
Stefan, Ping.
Comment 20 Stefan Sauer (gstreamer, gtkdoc dev) 2010-09-07 13:02:18 UTC
We have not made any changes that can have fixed this. Comment #15 still applies. If nobody disagrees I'll close it as wontfix though, as one can 'solve' it by using queues.