Activity log for bug #1194384

Date Who What changed Old value New value Message
2013-06-25 07:17:27 Daniel van Vugt bug added bug
2013-06-25 07:34:35 Daniel van Vugt summary Input event callbacks are made in a different thread Event callbacks are made in a different thread
2013-06-25 08:05:24 Daniel van Vugt summary Event callbacks are made in a different thread Event callbacks are not single-thread-safe
2013-06-26 03:41:45 Daniel van Vugt mir: assignee Daniel van Vugt (vanvugt)
2013-06-26 09:03:00 Daniel van Vugt mir: status New In Progress
2013-06-26 11:43:43 Daniel van Vugt branch linked lp:~vanvugt/mir/fix-1194384
2013-06-26 12:19:35 Daniel van Vugt mir: importance High Medium
2013-06-27 03:27:46 Robert Ancell mir: milestone 0.0.4 0.0.5
2013-06-27 03:48:32 Robert Ancell mir: milestone 0.0.5 0.0.6
2013-06-27 06:43:22 Daniel van Vugt summary Event callbacks are not single-thread-safe Mir client callbacks are not thread-safe
2013-06-27 06:50:16 Daniel van Vugt description Input event callbacks are made in a different thread to that where they were registered (where main is running). This is extremely dangerous. Many toolkits and simple apps rely on having mutually exclusive callbacks. This means callbacks will always run in the same thread that the app is. If you break this guarantee then many apps and toolkits are likely to break. If we do continue down the road of silently making single-threaded apps multi-threaded then we will need to expose locking primitives in the client API, at least. Mir clients may not be aware, but the callbacks made by libmirclient are not thread safe in any way. An apparently simple single-threaded Mir client has 3 threads, which can execute concurrently: 1. The "main" thread, where the initial connection was made. 2. The socket thread, where the protocol is handled (mir_connected_callback, mir_surface_callback, MirSurfaceEvent) 3. The input thread, where input events are received (mir_event_delegate_callback) Yes, you could receive a MirSurfaceEvent and MirMotionEvent simultaneously in different threads. Neither of which are the main thread. This is how a Mir client works. Unfortunately the existence of these threads is not yet documented. I will update the docs. But this bug is really about finding a way to make the client API more thread safe for simple toolkits and clients that normally don't care about threads.
2013-06-27 06:52:42 Daniel van Vugt mir: status In Progress Triaged
2013-06-27 06:56:27 Daniel van Vugt description Mir clients may not be aware, but the callbacks made by libmirclient are not thread safe in any way. An apparently simple single-threaded Mir client has 3 threads, which can execute concurrently: 1. The "main" thread, where the initial connection was made. 2. The socket thread, where the protocol is handled (mir_connected_callback, mir_surface_callback, MirSurfaceEvent) 3. The input thread, where input events are received (mir_event_delegate_callback) Yes, you could receive a MirSurfaceEvent and MirMotionEvent simultaneously in different threads. Neither of which are the main thread. This is how a Mir client works. Unfortunately the existence of these threads is not yet documented. I will update the docs. But this bug is really about finding a way to make the client API more thread safe for simple toolkits and clients that normally don't care about threads. Mir clients may not be aware, but the callbacks made by libmirclient are not thread safe in any way. An apparently simple single-threaded Mir client has 3 threads, which can execute concurrently: 1. The "main" thread, where the initial connection was made. 2. The socket thread, where the protocol is handled (mir_connected_callback, mir_surface_callback, MirSurfaceEvent) 3. The input thread, where input events are received (mir_event_delegate_callback) Yes, you could receive a MirSurfaceEvent and MirMotionEvent simultaneously in different threads. Neither of which are the main thread. This is how a Mir client works. Unfortunately the existence of these threads is not yet documented. I will update the docs. But this bug is really about finding a way to make the client API more thread safe for simple toolkits and clients that normally don't care about threads. To make matters worse, the client API functions are generally not thread safe either: mir_surface_* mir_connection_*. So libmirclient forces you to run in multiple threads and yet doesn't protect you at all against races and corruption that could arise from calling libmirclient from varying threads.
2013-06-27 06:59:48 Daniel van Vugt description Mir clients may not be aware, but the callbacks made by libmirclient are not thread safe in any way. An apparently simple single-threaded Mir client has 3 threads, which can execute concurrently: 1. The "main" thread, where the initial connection was made. 2. The socket thread, where the protocol is handled (mir_connected_callback, mir_surface_callback, MirSurfaceEvent) 3. The input thread, where input events are received (mir_event_delegate_callback) Yes, you could receive a MirSurfaceEvent and MirMotionEvent simultaneously in different threads. Neither of which are the main thread. This is how a Mir client works. Unfortunately the existence of these threads is not yet documented. I will update the docs. But this bug is really about finding a way to make the client API more thread safe for simple toolkits and clients that normally don't care about threads. To make matters worse, the client API functions are generally not thread safe either: mir_surface_* mir_connection_*. So libmirclient forces you to run in multiple threads and yet doesn't protect you at all against races and corruption that could arise from calling libmirclient from varying threads. Mir clients may not be aware, but the callbacks made by libmirclient are not thread safe in any way. An apparently simple single-threaded Mir client has 3 threads, which can execute concurrently: 1. The "main" thread, where the initial connection was made. 2. The socket thread, where the protocol is handled (mir_connected_callback, mir_surface_callback, MirSurfaceEvent) 3. The input thread, where input events are received (MirMotionEvent, MirKeyEvent) Yes, you could receive a MirSurfaceEvent and MirMotionEvent simultaneously in different threads. Neither of which are the main thread. This is how a Mir client works. Unfortunately the existence of these threads is not yet documented. I will update the docs. But this bug is really about finding a way to make the client API more thread safe for simple toolkits and clients that normally don't care about threads. To make matters worse, the client API functions are generally not thread safe either: mir_surface_* mir_connection_*. So libmirclient forces you to run in multiple threads and yet doesn't protect you at all against races and corruption that could arise from calling libmirclient from varying threads.
2013-06-27 07:01:06 Daniel van Vugt tags clientapi
2013-06-27 08:06:10 Daniel van Vugt mir: status Triaged In Progress
2013-07-01 08:21:02 Daniel van Vugt description Mir clients may not be aware, but the callbacks made by libmirclient are not thread safe in any way. An apparently simple single-threaded Mir client has 3 threads, which can execute concurrently: 1. The "main" thread, where the initial connection was made. 2. The socket thread, where the protocol is handled (mir_connected_callback, mir_surface_callback, MirSurfaceEvent) 3. The input thread, where input events are received (MirMotionEvent, MirKeyEvent) Yes, you could receive a MirSurfaceEvent and MirMotionEvent simultaneously in different threads. Neither of which are the main thread. This is how a Mir client works. Unfortunately the existence of these threads is not yet documented. I will update the docs. But this bug is really about finding a way to make the client API more thread safe for simple toolkits and clients that normally don't care about threads. To make matters worse, the client API functions are generally not thread safe either: mir_surface_* mir_connection_*. So libmirclient forces you to run in multiple threads and yet doesn't protect you at all against races and corruption that could arise from calling libmirclient from varying threads. Mir clients may not be aware, but the callbacks made by libmirclient are not thread safe in any way. An apparently simple single-threaded Mir client has 3 threads, which can execute concurrently: 1. The "main" thread, where the initial connection was made. 2. The socket thread, where the protocol is handled (mir_connected_callback, mir_surface_callback, MirSurfaceEvent) 3. The input thread, where input events are received (MirMotionEvent, MirKeyEvent) Yes, you could receive a MirSurfaceEvent and MirMotionEvent simultaneously in different threads. Neither of which are the main thread. This is how a Mir client works. Unfortunately the existence of these threads is not yet documented. I will update the docs. But this bug is really about finding a way to make the client API more thread safe for simple toolkits and clients that normally don't care about threads. To make matters worse, the client API functions are generally not thread safe either: mir_surface_* mir_connection_*. So libmirclient forces you to run in multiple threads and yet doesn't protect you at all against races and corruption that could arise from calling libmirclient from varying threads. UPDATE: See lp:~vanvugt/mir/threadsafe-clients
2013-07-01 08:21:24 Daniel van Vugt branch linked lp:~vanvugt/mir/threadsafe-clients
2013-07-01 08:22:41 Daniel van Vugt description Mir clients may not be aware, but the callbacks made by libmirclient are not thread safe in any way. An apparently simple single-threaded Mir client has 3 threads, which can execute concurrently: 1. The "main" thread, where the initial connection was made. 2. The socket thread, where the protocol is handled (mir_connected_callback, mir_surface_callback, MirSurfaceEvent) 3. The input thread, where input events are received (MirMotionEvent, MirKeyEvent) Yes, you could receive a MirSurfaceEvent and MirMotionEvent simultaneously in different threads. Neither of which are the main thread. This is how a Mir client works. Unfortunately the existence of these threads is not yet documented. I will update the docs. But this bug is really about finding a way to make the client API more thread safe for simple toolkits and clients that normally don't care about threads. To make matters worse, the client API functions are generally not thread safe either: mir_surface_* mir_connection_*. So libmirclient forces you to run in multiple threads and yet doesn't protect you at all against races and corruption that could arise from calling libmirclient from varying threads. UPDATE: See lp:~vanvugt/mir/threadsafe-clients Mir clients may not be aware, but the callbacks made by libmirclient are not thread safe in any way. An apparently simple single-threaded Mir client has 3 threads, which can execute concurrently: 1. The "main" thread, where the initial connection was made. 2. The socket thread, where the protocol is handled (mir_connected_callback, mir_surface_callback, MirSurfaceEvent) 3. The input thread, where input events are received (MirMotionEvent, MirKeyEvent) Yes, you could receive a MirSurfaceEvent and MirMotionEvent simultaneously in different threads. Neither of which are the main thread. This is how a Mir client works. Unfortunately the existence of these threads is not yet documented. I will update the docs. But this bug is really about finding a way to make the client API more thread safe for simple toolkits and clients that normally don't care about threads. UPDATE: Client API docs improved in r789. To make matters worse, the client API functions are generally not thread safe either: mir_surface_* mir_connection_*. So libmirclient forces you to run in multiple threads and yet doesn't protect you at all against races and corruption that could arise from calling libmirclient from varying threads. UPDATE: See lp:~vanvugt/mir/threadsafe-clients
2013-07-01 08:23:06 Daniel van Vugt mir: status In Progress Triaged
2013-07-01 08:23:52 Daniel van Vugt branch unlinked lp:~vanvugt/mir/threadsafe-clients
2013-07-08 03:05:27 Robert Ancell mir: milestone 0.0.6 0.0.7
2013-07-14 20:59:40 Robert Ancell mir: milestone 0.0.7
2013-07-14 20:59:43 Robert Ancell mir: milestone 0.0.8
2013-07-21 21:52:29 Robert Ancell mir: milestone 0.0.8 0.0.9
2013-07-22 01:51:20 Daniel van Vugt description Mir clients may not be aware, but the callbacks made by libmirclient are not thread safe in any way. An apparently simple single-threaded Mir client has 3 threads, which can execute concurrently: 1. The "main" thread, where the initial connection was made. 2. The socket thread, where the protocol is handled (mir_connected_callback, mir_surface_callback, MirSurfaceEvent) 3. The input thread, where input events are received (MirMotionEvent, MirKeyEvent) Yes, you could receive a MirSurfaceEvent and MirMotionEvent simultaneously in different threads. Neither of which are the main thread. This is how a Mir client works. Unfortunately the existence of these threads is not yet documented. I will update the docs. But this bug is really about finding a way to make the client API more thread safe for simple toolkits and clients that normally don't care about threads. UPDATE: Client API docs improved in r789. To make matters worse, the client API functions are generally not thread safe either: mir_surface_* mir_connection_*. So libmirclient forces you to run in multiple threads and yet doesn't protect you at all against races and corruption that could arise from calling libmirclient from varying threads. UPDATE: See lp:~vanvugt/mir/threadsafe-clients Mir clients may not be aware, but the callbacks made by libmirclient are not thread safe in any way. An apparently simple single-threaded Mir client has 3 threads, which can execute concurrently: 1. The "main" thread, where the initial connection was made. 2. The socket thread, where the protocol is handled (mir_connected_callback, mir_surface_callback, MirSurfaceEvent) 3. The input thread, where input events are received (MirMotionEvent, MirKeyEvent) Yes, you could receive a MirSurfaceEvent and MirMotionEvent simultaneously in different threads. Neither of which are the main thread. This is how a Mir client works. Unfortunately the existence of these threads is not yet documented. I will update the docs. But this bug is really about finding a way to make the client API more thread safe for simple toolkits and clients that normally don't care about threads. UPDATE: Client API docs improved in r789. To make matters worse, the client API functions are generally not thread safe either: mir_surface_* mir_connection_*. So libmirclient forces you to run in multiple threads and yet doesn't protect you at all against races and corruption that could arise from calling libmirclient from varying threads. UPDATE: Fixed in r827
2013-07-22 01:51:42 Daniel van Vugt description Mir clients may not be aware, but the callbacks made by libmirclient are not thread safe in any way. An apparently simple single-threaded Mir client has 3 threads, which can execute concurrently: 1. The "main" thread, where the initial connection was made. 2. The socket thread, where the protocol is handled (mir_connected_callback, mir_surface_callback, MirSurfaceEvent) 3. The input thread, where input events are received (MirMotionEvent, MirKeyEvent) Yes, you could receive a MirSurfaceEvent and MirMotionEvent simultaneously in different threads. Neither of which are the main thread. This is how a Mir client works. Unfortunately the existence of these threads is not yet documented. I will update the docs. But this bug is really about finding a way to make the client API more thread safe for simple toolkits and clients that normally don't care about threads. UPDATE: Client API docs improved in r789. To make matters worse, the client API functions are generally not thread safe either: mir_surface_* mir_connection_*. So libmirclient forces you to run in multiple threads and yet doesn't protect you at all against races and corruption that could arise from calling libmirclient from varying threads. UPDATE: Fixed in r827 Mir clients may not be aware, but the callbacks made by libmirclient are not thread safe in any way. An apparently simple single-threaded Mir client has 3 threads, which can execute concurrently: 1. The "main" thread, where the initial connection was made. 2. The socket thread, where the protocol is handled (mir_connected_callback, mir_surface_callback, MirSurfaceEvent) 3. The input thread, where input events are received (MirMotionEvent, MirKeyEvent) Yes, you could receive a MirSurfaceEvent and MirMotionEvent simultaneously in different threads. Neither of which are the main thread. This is how a Mir client works. Unfortunately the existence of these threads is not yet documented. I will update the docs. But this bug is really about finding a way to make the client API more thread safe for simple toolkits and clients that normally don't care about threads. UPDATE: Client API docs improved in r789. To make matters worse, the client API functions are generally not thread safe either: mir_surface_* mir_connection_*. So libmirclient forces you to run in multiple threads and yet doesn't protect you at all against races and corruption that could arise from calling libmirclient from varying threads. UPDATE: Fixed in r827
2013-07-22 01:52:05 Daniel van Vugt mir: assignee Daniel van Vugt (vanvugt)
2013-08-11 21:21:36 Robert Ancell mir: milestone 0.0.9 0.0.10
2013-08-26 00:12:51 Robert Ancell mir: milestone 0.0.10 0.0.11
2013-09-27 19:52:41 kevin gunn mir: importance Medium High
2013-09-30 06:06:31 Daniel van Vugt mir: milestone 0.0.11 0.0.13
2013-10-03 21:10:03 Chris Gagnon tags clientapi clientapi qa-touch
2013-10-10 05:42:52 Daniel van Vugt mir: milestone 0.0.13
2013-11-21 06:08:20 Daniel van Vugt mir: assignee Daniel van Vugt (vanvugt)
2013-11-21 07:02:06 Daniel van Vugt mir: status Triaged In Progress
2013-11-21 07:02:08 Daniel van Vugt mir: milestone 0.1.2
2013-11-25 03:10:48 Daniel van Vugt mir: milestone 0.1.2 0.1.3
2013-11-27 08:32:12 Daniel van Vugt branch linked lp:~vanvugt/mir/event-queue
2013-12-12 02:48:01 Daniel van Vugt mir: status In Progress Triaged
2013-12-12 02:48:05 Daniel van Vugt mir: milestone 0.1.3
2014-01-03 01:38:20 Daniel van Vugt tags clientapi qa-touch clientapi input qa-touch
2014-02-21 01:33:59 Daniel van Vugt mir: assignee Daniel van Vugt (vanvugt)
2014-02-26 16:45:09 kevin gunn mir: importance High Critical
2014-05-29 09:54:11 Allison Karlitskaya bug added subscriber Ryan Lortie
2014-07-22 01:56:10 Daniel van Vugt mir: importance Critical High
2014-10-28 08:04:26 Xu Bin bug added subscriber Xu Bin
2015-02-24 09:09:40 Maarten Lankhorst bug task added xmir
2015-02-24 09:09:50 Maarten Lankhorst xmir: status New Confirmed
2015-02-24 09:09:52 Maarten Lankhorst xmir: importance Undecided Wishlist
2015-06-09 04:36:35 Robert Ancell affects xmir xorg-server (Ubuntu)
2015-06-09 04:37:15 Robert Ancell tags clientapi input qa-touch clientapi input qa-touch xmir
2015-09-09 00:34:06 Robert Ancell bug task deleted xorg-server (Ubuntu)
2015-10-05 03:59:31 Daniel van Vugt mir: importance High Medium
2017-11-03 15:25:21 Michał Sawicz mir (Ubuntu): importance Undecided Medium
2017-11-03 15:25:21 Michał Sawicz mir (Ubuntu): status New Triaged