Skip to content

Commit 22f3606

Browse files
committed
Fix leak of gst promise with custom change func
Synchronize signatures of `GstPromiseAPI.gst_promise_new_with_change_func` and `GstPromiseAPI.ptr_gst_promise_new_with_change_func` to C's version, so that it would not get unknown `user_data` and `notify`, otherwise we will get coredump in `gst_promise_free`.
1 parent ca315f5 commit 22f3606

File tree

3 files changed

+27
-3
lines changed

3 files changed

+27
-3
lines changed

src/org/freedesktop/gstreamer/Promise.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public Promise(final PROMISE_CHANGE listener) {
6666
public void callback(Promise promise, Pointer userData) {
6767
listener.onChange(promise);
6868
}
69-
}), false, false));
69+
}, null, null)));
7070
}
7171

7272
/**

src/org/freedesktop/gstreamer/lowlevel/GstPromiseAPI.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ protected List<String> getFieldOrder() {
6060
@CallerOwnsReturn Promise gst_promise_new();
6161
@CallerOwnsReturn Pointer ptr_gst_promise_new();
6262

63-
@CallerOwnsReturn Promise gst_promise_new_with_change_func(GstCallback callback);
64-
@CallerOwnsReturn Pointer ptr_gst_promise_new_with_change_func(GstCallback callback);
63+
@CallerOwnsReturn Promise gst_promise_new_with_change_func(GstCallback callback, Pointer userData, Pointer destroyNotify);
64+
@CallerOwnsReturn Pointer ptr_gst_promise_new_with_change_func(GstCallback callback, Pointer userData, Pointer destroyNotify);
6565

6666
PromiseResult gst_promise_wait(Promise promise);
6767

test/org/freedesktop/gstreamer/PromiseTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,28 @@ public void testReplyData() {
9696
Structure result = promise.getReply();
9797
assertTrue("result of promise does not match reply", result.isEqual(data));
9898
}
99+
100+
@Test
101+
public void testDispose() {
102+
if (!Gst.testVersion(1, 14)) {
103+
return;
104+
}
105+
Promise promise = new Promise();
106+
promise.interrupt();
107+
promise.dispose();
108+
}
109+
110+
@Test
111+
public void testDisposeWithChangeFunc() {
112+
if (!Gst.testVersion(1, 14)) {
113+
return;
114+
}
115+
Promise promise = new Promise(new Promise.PROMISE_CHANGE() {
116+
@Override
117+
public void onChange(Promise promise) {
118+
}
119+
});
120+
promise.interrupt();
121+
promise.dispose();
122+
}
99123
}

0 commit comments

Comments
 (0)