7 GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
12 GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
23 thread = gst_thread_new ("testthread");
24 element = gst_element_new ();
25 gst_element_set_name (element, "test1");
26 gst_bin_add (GST_BIN (thread), element);
27 element = gst_element_new ();
28 gst_element_set_name (element, "test2");
29 gst_bin_add (GST_BIN (thread), element);
35 create_thread_ghostpads (void)
38 GstElement *element1, *element2;
40 thread = gst_thread_new ("testthread");
41 element1 = gst_element_new ();
42 gst_element_set_name (element1, "test1");
43 gst_element_add_pad (element1,
44 gst_pad_new_from_template (gst_static_pad_template_get (&srctemplate),
46 gst_bin_add (GST_BIN (thread), element1);
47 element2 = gst_element_new ();
48 gst_element_set_name (element2, "test2");
49 gst_element_add_pad (element1,
50 gst_pad_new_from_template (gst_static_pad_template_get (&sinktemplate),
52 gst_bin_add (GST_BIN (thread), element2);
53 gst_element_link (element1, "src1", element2, "sink1");
54 gst_element_add_ghost_pad (thread, gst_element_get_pad (element2, "sink1"),
61 add_remove_test1 (void)
66 thread = gst_thread_new ("testthread");
67 element = gst_element_new ();
68 gst_element_set_name (element, "test1");
69 g_assert (GST_OBJECT_FLOATING (element));
70 gst_bin_add (GST_BIN (thread), element);
71 g_assert (!GST_OBJECT_FLOATING (element));
72 gst_bin_remove (GST_BIN (thread), element);
74 gst_object_unref (thread);
78 add_remove_test2 (void)
83 thread = gst_thread_new ("testthread");
84 element = gst_element_new ();
85 gst_element_set_name (element, "test1");
86 gst_object_ref (element);
87 g_assert (GST_OBJECT_FLOATING (element));
88 gst_bin_add (GST_BIN (thread), element);
89 g_assert (!GST_OBJECT_FLOATING (element));
90 gst_bin_remove (GST_BIN (thread), element);
91 g_assert (!GST_OBJECT_FLOATING (element));
92 g_assert (!GST_OBJECT_DESTROYED (element));
94 gst_object_unref (element);
95 g_assert (GST_OBJECT_DESTROYED (element));
96 gst_object_unref (element);
98 gst_object_unref (thread);
102 add_remove_test3 (void)
107 thread = gst_thread_new ("testthread");
108 element = gst_element_new ();
109 gst_element_set_name (element, "test1");
110 g_assert (GST_OBJECT_FLOATING (element));
111 gst_bin_add (GST_BIN (thread), element);
112 g_assert (!GST_OBJECT_FLOATING (element));
114 gst_object_unref (element);
115 g_assert (gst_bin_get_by_name (GST_BIN (thread), "test1") == NULL);
117 gst_object_unref (thread);
121 add_remove_test4 (void)
123 GstElement *thread, *thread2;
126 thread = gst_thread_new ("testthread");
127 element = gst_element_new ();
128 gst_element_set_name (element, "test1");
129 g_assert (GST_OBJECT_FLOATING (element));
130 gst_bin_add (GST_BIN (thread), element);
131 g_assert (!GST_OBJECT_FLOATING (element));
133 thread2 = create_thread ();
134 g_assert (GST_OBJECT_FLOATING (thread2));
135 gst_bin_add (GST_BIN (thread), thread2);
136 g_assert (!GST_OBJECT_FLOATING (thread2));
138 gst_object_unref (thread2);
139 g_assert (gst_bin_get_by_name (GST_BIN (thread), "testthread") == NULL);
140 gst_object_unref (element);
141 g_assert (gst_bin_get_by_name (GST_BIN (thread), "test1") == NULL);
143 gst_object_unref (thread);
147 main (int argc, gchar * argv[])
149 GstElement *thread, *element;
153 gst_init (&argc, &argv);
156 iters = atoi (argv[1]);
160 g_print ("starting test\n");
163 thread = gst_thread_new ("somethread");
164 gst_object_unref (thread);
165 g_print ("create/unref new thread %ld\n", vmsize () - usage1);
167 for (i = 0; i < iters; i++) {
168 thread = gst_thread_new ("somethread");
169 gst_object_unref (thread);
171 g_print ("create/unref %d threads %ld\n", iters, vmsize () - usage1);
173 thread = gst_thread_new ("somethread");
174 g_assert (GST_OBJECT_FLOATING (thread));
175 gst_object_ref (thread);
176 gst_object_sink (GST_OBJECT (thread));
177 g_assert (!GST_OBJECT_FLOATING (thread));
178 gst_object_unref (thread);
179 g_print ("create/ref/sink/unref new thread %ld\n", vmsize () - usage1);
182 for (i = 0; i < iters; i++) {
183 thread = gst_thread_new ("somethread");
184 gst_object_ref (thread);
185 gst_object_sink (GST_OBJECT (thread));
186 gst_object_unref (thread);
188 g_print ("create/ref/sink/unref %d threads %ld\n", iters, vmsize () - usage1);
190 thread = gst_thread_new ("somethread");
191 g_assert (!GST_OBJECT_DESTROYED (thread));
192 gst_object_unref (thread);
193 g_assert (GST_OBJECT_DESTROYED (thread));
194 gst_object_unref (thread);
195 g_print ("create/destroy/unref new thread %ld\n", vmsize () - usage1);
197 for (i = 0; i < iters; i++) {
198 thread = gst_thread_new ("somethread");
199 gst_object_unref (thread);
200 gst_object_unref (thread);
202 g_print ("create/destroy/unref %d thread %ld\n", iters, vmsize () - usage1);
204 thread = gst_thread_new ("somethread");
205 gst_object_ref (thread);
206 gst_object_unref (thread);
207 gst_object_unref (thread);
208 g_print ("create/ref/unref/unref new thread %ld\n", vmsize () - usage1);
210 for (i = 0; i < iters; i++) {
211 thread = gst_thread_new ("somethread");
212 gst_object_ref (thread);
213 gst_object_unref (thread);
214 gst_object_unref (thread);
216 g_print ("create/ref/unref/unref %d thread %ld\n", iters, vmsize () - usage1);
218 thread = gst_thread_new ("somethread");
219 gst_object_ref (thread);
220 gst_object_unref (thread);
221 gst_object_unref (thread);
222 gst_object_unref (thread);
223 g_print ("craete/ref/destroy/unref/unref new thread %ld\n",
226 for (i = 0; i < iters; i++) {
227 thread = gst_thread_new ("somethread");
228 gst_object_ref (thread);
229 gst_object_unref (thread);
230 gst_object_unref (thread);
231 gst_object_unref (thread);
233 g_print ("craete/ref/destroy/unref/unref %d threads %ld\n", iters,
236 for (i = 0; i < iters; i++) {
237 thread = gst_thread_new ("somethread");
238 gst_object_ref (thread);
239 gst_element_set_name (thread, "testing123");
240 gst_object_unref (thread);
241 gst_element_set_name (thread, "testing123");
242 gst_object_unref (thread);
243 gst_object_unref (thread);
245 g_print ("craete/ref/destroy/unref/unref %d threads with name %ld\n", iters,
248 thread = gst_thread_new ("somethread");
249 for (i = 0; i < iters; i++) {
250 gst_element_set_name (thread, "testing");
252 gst_object_unref (thread);
253 g_print ("set name %d times %ld\n", iters, vmsize () - usage1);
255 for (i = 0; i < iters; i++) {
256 thread = gst_thread_new ("somethread");
257 element = gst_element_new ();
258 gst_element_set_name (element, "test1");
259 gst_bin_add (GST_BIN (thread), element);
260 gst_object_unref (thread);
262 g_print ("create/unref %d thread with one element %ld\n", iters,
265 for (i = 0; i < iters; i++) {
266 thread = create_thread ();
267 gst_object_unref (thread);
269 g_print ("create/unref %d thread with children %ld\n", iters,
272 for (i = 0; i < iters / 2; i++) {
273 thread = create_thread_ghostpads ();
274 gst_object_unref (thread);
276 g_print ("create/unref %d thread with children and ghostpads %ld\n",
277 iters / 2, vmsize () - usage1);
279 for (i = 0; i < iters; i++) {
282 g_print ("add/remove test1 %d in thread %ld\n", iters, vmsize () - usage1);
284 for (i = 0; i < iters; i++) {
287 g_print ("add/remove test2 %d in thread %ld\n", iters, vmsize () - usage1);
289 for (i = 0; i < iters; i++) {
292 g_print ("add/destroy/remove test3 %d in thread %ld\n", iters,
295 for (i = 0; i < iters; i++) {
298 g_print ("add/destroy/remove test4 %d in thread %ld\n", iters,
301 g_print ("leaked: %ld\n", vmsize () - usage1);
303 return (vmsize () - usage1 ? -1 : 0);