​​Hi,

I think this is just wrong.

It evas_thread_exited is True, it does not mean that the thread is actually
finished. eina_thread_join() should be called **unconditionally** in this
case.
It is specified that if the thread is terminated, then pthread_join()
(eina_thread's backend) will return immediately.

BR


Jean

On Tue, Sep 5, 2017 at 2:16 PM, Marcel Hollerbach <
[email protected]> wrote:

> bu5hm4n pushed a commit to branch master.
>
> http://git.enlightenment.org/core/efl.git/commit/?id=
> e41d46c635bdf769d4b93da609883347168c719a
>
> commit e41d46c635bdf769d4b93da609883347168c719a
> Author: Marcel Hollerbach <[email protected]>
> Date:   Mon Sep 4 19:44:03 2017 +0200
>
>     evas_thread: only join the thread if the thread is still alive
>
>     otherwise we might join a invalid thread id, that could lead to a
>     deadlock. Lets not do that.
>
>     ref T5245
>
>     @fix
> ---
>  src/lib/evas/common/evas_thread_render.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/lib/evas/common/evas_thread_render.c
> b/src/lib/evas/common/evas_thread_render.c
> index bbde81a657..62f0ba1577 100644
> --- a/src/lib/evas/common/evas_thread_render.c
> +++ b/src/lib/evas/common/evas_thread_render.c
> @@ -260,8 +260,8 @@ evas_thread_shutdown(void)
>               goto timeout_shutdown;
>            }
>       }
> -
> -   eina_thread_join(evas_thread_worker);
> +   if (!evas_thread_exited)
> +     eina_thread_join(evas_thread_worker);
>  timeout_shutdown:
>     eina_lock_free(&evas_thread_queue_lock);
>     eina_condition_free(&evas_thread_queue_condition);
>
> --
>
>
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to