Fixed a threading issue in uiQueueMain() on GTK+.
This commit is contained in:
parent
6779ae91d7
commit
211b11b80f
|
@ -7,7 +7,10 @@ This README is being written.<br>
|
||||||
|
|
||||||
## Announcements
|
## Announcements
|
||||||
|
|
||||||
* **<codedate**
|
* **31 October 2016**
|
||||||
|
* @krakjoe noticed that I accidentally used thread-unsafe code in uiQueueMain() on Unix. Fixed.
|
||||||
|
|
||||||
|
* **24 October 2016**
|
||||||
* `uiWindowSetContentSize()` on Unix no longer needs to call up the GTK+ main loop. As a result, bugs related to strange behavior using that function (and the now-deleted `uiWindowSetPosition()` and `uiWindowCenter()`) should go away. I'll need to go through the bugs to verify as much, though.
|
* `uiWindowSetContentSize()` on Unix no longer needs to call up the GTK+ main loop. As a result, bugs related to strange behavior using that function (and the now-deleted `uiWindowSetPosition()` and `uiWindowCenter()`) should go away. I'll need to go through the bugs to verify as much, though.
|
||||||
|
|
||||||
* **22 October 2016**
|
* **22 October 2016**
|
||||||
|
|
|
@ -91,7 +91,7 @@ static gboolean doqueued(gpointer data)
|
||||||
struct queued *q = (struct queued *) data;
|
struct queued *q = (struct queued *) data;
|
||||||
|
|
||||||
(*(q->f))(q->data);
|
(*(q->f))(q->data);
|
||||||
uiFree(q);
|
g_free(q);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +99,9 @@ void uiQueueMain(void (*f)(void *data), void *data)
|
||||||
{
|
{
|
||||||
struct queued *q;
|
struct queued *q;
|
||||||
|
|
||||||
q = uiNew(struct queued);
|
// we have to use g_new0()/g_free() because uiAlloc() is only safe to call on the main thread
|
||||||
|
// for some reason it didn't affect me, but it did affect krakjoe
|
||||||
|
q = g_new0(struct queued, 1);
|
||||||
q->f = f;
|
q->f = f;
|
||||||
q->data = data;
|
q->data = data;
|
||||||
gdk_threads_add_idle(doqueued, q);
|
gdk_threads_add_idle(doqueued, q);
|
||||||
|
|
Loading…
Reference in New Issue