13 thread = gst_thread_new ("testthread");
14 element = gst_element_new ();
15 gst_element_set_name (element, "test1");
16 gst_bin_add (GST_BIN (thread), element);
17 element = gst_element_new ();
18 gst_element_set_name (element, "test2");
19 gst_bin_add (GST_BIN (thread), element);
25 create_thread_ghostpads (void)
28 GstElement *element1, *element2;
30 thread = gst_thread_new ("testthread");
31 element1 = gst_element_new ();
32 gst_element_set_name (element1, "test1");
33 gst_element_add_pad (element1, gst_pad_new ("src1", GST_PAD_SRC));
34 gst_bin_add (GST_BIN (thread), element1);
35 element2 = gst_element_new ();
36 gst_element_set_name (element2, "test2");
37 gst_element_add_pad (element2, gst_pad_new ("sink1", GST_PAD_SINK));
38 gst_bin_add (GST_BIN (thread), element2);
39 gst_element_link (element1, "src1", element2, "sink1");
40 gst_element_add_ghost_pad (thread, gst_element_get_pad (element2, "sink1"),
47 add_remove_test1 (void)
52 thread = gst_thread_new ("testthread");
53 element = gst_element_new ();
54 gst_element_set_name (element, "test1");
55 g_assert (GST_OBJECT_FLOATING (element));
56 gst_bin_add (GST_BIN (thread), element);
57 g_assert (!GST_OBJECT_FLOATING (element));
58 gst_bin_remove (GST_BIN (thread), element);
60 gst_object_unref (GST_OBJECT (thread));
64 add_remove_test2 (void)
69 thread = gst_thread_new ("testthread");
70 element = gst_element_new ();
71 gst_element_set_name (element, "test1");
72 gst_object_ref (GST_OBJECT (element));
73 g_assert (GST_OBJECT_FLOATING (element));
74 gst_bin_add (GST_BIN (thread), element);
75 g_assert (!GST_OBJECT_FLOATING (element));
76 gst_bin_remove (GST_BIN (thread), element);
77 g_assert (!GST_OBJECT_FLOATING (element));
78 g_assert (!GST_OBJECT_DESTROYED (element));
80 gst_object_unref (GST_OBJECT (element));
81 g_assert (GST_OBJECT_DESTROYED (element));
82 gst_object_unref (GST_OBJECT (element));
84 gst_object_unref (GST_OBJECT (thread));
88 add_remove_test3 (void)
93 thread = gst_thread_new ("testthread");
94 element = gst_element_new ();
95 gst_element_set_name (element, "test1");
96 g_assert (GST_OBJECT_FLOATING (element));
97 gst_bin_add (GST_BIN (thread), element);
98 g_assert (!GST_OBJECT_FLOATING (element));
100 gst_object_unref (GST_OBJECT (element));
101 g_assert (gst_bin_get_by_name (GST_BIN (thread), "test1") == NULL);
103 gst_object_unref (GST_OBJECT (thread));
107 add_remove_test4 (void)
109 GstElement *thread, *thread2;
112 thread = gst_thread_new ("testthread");
113 element = gst_element_new ();
114 gst_element_set_name (element, "test1");
115 g_assert (GST_OBJECT_FLOATING (element));
116 gst_bin_add (GST_BIN (thread), element);
117 g_assert (!GST_OBJECT_FLOATING (element));
119 thread2 = create_thread ();
120 g_assert (GST_OBJECT_FLOATING (thread2));
121 gst_bin_add (GST_BIN (thread), thread2);
122 g_assert (!GST_OBJECT_FLOATING (thread2));
124 gst_object_unref (GST_OBJECT (thread2));
125 g_assert (gst_bin_get_by_name (GST_BIN (thread), "testthread") == NULL);
126 gst_object_unref (GST_OBJECT (element));
127 g_assert (gst_bin_get_by_name (GST_BIN (thread), "test1") == NULL);
129 gst_object_unref (GST_OBJECT (thread));
133 main (int argc, gchar * argv[])
135 GstElement *thread, *element;
139 gst_init (&argc, &argv);
142 iters = atoi (argv[1]);
146 g_print ("starting test\n");
149 thread = gst_thread_new ("somethread");
150 gst_object_unref (GST_OBJECT (thread));
151 g_print ("create/unref new thread %ld\n", vmsize () - usage1);
153 for (i = 0; i < iters; i++) {
154 thread = gst_thread_new ("somethread");
155 gst_object_unref (GST_OBJECT (thread));
157 g_print ("create/unref %d threads %ld\n", iters, vmsize () - usage1);
159 thread = gst_thread_new ("somethread");
160 g_assert (GST_OBJECT_FLOATING (thread));
161 gst_object_ref (GST_OBJECT (thread));
162 gst_object_sink (GST_OBJECT (thread));
163 g_assert (!GST_OBJECT_FLOATING (thread));
164 gst_object_unref (GST_OBJECT (thread));
165 g_print ("create/ref/sink/unref new thread %ld\n", vmsize () - usage1);
168 for (i = 0; i < iters; i++) {
169 thread = gst_thread_new ("somethread");
170 gst_object_ref (GST_OBJECT (thread));
171 gst_object_sink (GST_OBJECT (thread));
172 gst_object_unref (GST_OBJECT (thread));
174 g_print ("create/ref/sink/unref %d threads %ld\n", iters, vmsize () - usage1);
176 thread = gst_thread_new ("somethread");
177 g_assert (!GST_OBJECT_DESTROYED (thread));
178 gst_object_unref (GST_OBJECT (thread));
179 g_assert (GST_OBJECT_DESTROYED (thread));
180 gst_object_unref (GST_OBJECT (thread));
181 g_print ("create/destroy/unref new thread %ld\n", vmsize () - usage1);
183 for (i = 0; i < iters; i++) {
184 thread = gst_thread_new ("somethread");
185 gst_object_unref (GST_OBJECT (thread));
186 gst_object_unref (GST_OBJECT (thread));
188 g_print ("create/destroy/unref %d thread %ld\n", iters, vmsize () - usage1);
190 thread = gst_thread_new ("somethread");
191 gst_object_ref (GST_OBJECT (thread));
192 gst_object_unref (GST_OBJECT (thread));
193 gst_object_unref (GST_OBJECT (thread));
194 g_print ("create/ref/unref/unref new thread %ld\n", vmsize () - usage1);
196 for (i = 0; i < iters; i++) {
197 thread = gst_thread_new ("somethread");
198 gst_object_ref (GST_OBJECT (thread));
199 gst_object_unref (GST_OBJECT (thread));
200 gst_object_unref (GST_OBJECT (thread));
202 g_print ("create/ref/unref/unref %d thread %ld\n", iters, vmsize () - usage1);
204 thread = gst_thread_new ("somethread");
205 gst_object_ref (GST_OBJECT (thread));
206 gst_object_unref (GST_OBJECT (thread));
207 gst_object_unref (GST_OBJECT (thread));
208 gst_object_unref (GST_OBJECT (thread));
209 g_print ("craete/ref/destroy/unref/unref new thread %ld\n",
212 for (i = 0; i < iters; i++) {
213 thread = gst_thread_new ("somethread");
214 gst_object_ref (GST_OBJECT (thread));
215 gst_object_unref (GST_OBJECT (thread));
216 gst_object_unref (GST_OBJECT (thread));
217 gst_object_unref (GST_OBJECT (thread));
219 g_print ("craete/ref/destroy/unref/unref %d threads %ld\n", iters,
222 for (i = 0; i < iters; i++) {
223 thread = gst_thread_new ("somethread");
224 gst_object_ref (GST_OBJECT (thread));
225 gst_element_set_name (thread, "testing123");
226 gst_object_unref (GST_OBJECT (thread));
227 gst_element_set_name (thread, "testing123");
228 gst_object_unref (GST_OBJECT (thread));
229 gst_object_unref (GST_OBJECT (thread));
231 g_print ("craete/ref/destroy/unref/unref %d threads with name %ld\n", iters,
234 thread = gst_thread_new ("somethread");
235 for (i = 0; i < iters; i++) {
236 gst_element_set_name (thread, "testing");
238 gst_object_unref (GST_OBJECT (thread));
239 g_print ("set name %d times %ld\n", iters, vmsize () - usage1);
241 for (i = 0; i < iters; i++) {
242 thread = gst_thread_new ("somethread");
243 element = gst_element_new ();
244 gst_element_set_name (element, "test1");
245 gst_bin_add (GST_BIN (thread), element);
246 gst_object_unref (GST_OBJECT (thread));
248 g_print ("create/unref %d thread with one element %ld\n", iters,
251 for (i = 0; i < iters; i++) {
252 thread = create_thread ();
253 gst_object_unref (GST_OBJECT (thread));
255 g_print ("create/unref %d thread with children %ld\n", iters,
258 for (i = 0; i < iters / 2; i++) {
259 thread = create_thread_ghostpads ();
260 gst_object_unref (GST_OBJECT (thread));
262 g_print ("create/unref %d thread with children and ghostpads %ld\n",
263 iters / 2, vmsize () - usage1);
265 for (i = 0; i < iters; i++) {
268 g_print ("add/remove test1 %d in thread %ld\n", iters, vmsize () - usage1);
270 for (i = 0; i < iters; i++) {
273 g_print ("add/remove test2 %d in thread %ld\n", iters, vmsize () - usage1);
275 for (i = 0; i < iters; i++) {
278 g_print ("add/destroy/remove test3 %d in thread %ld\n", iters,
281 for (i = 0; i < iters; i++) {
284 g_print ("add/destroy/remove test4 %d in thread %ld\n", iters,
287 g_print ("leaked: %ld\n", vmsize () - usage1);
289 return (vmsize () - usage1 ? -1 : 0);