Re: [pcre-dev] PCRE2 and thread safety of jit compilation?

Top Page
Delete this message
Author: ph10
Date:  
To: Giuseppe D'Angelo
CC: Pcre
Subject: Re: [pcre-dev] PCRE2 and thread safety of jit compilation?
On Sun, 3 Jan 2016, Giuseppe D'Angelo wrote:

> In PCRE2 the extra studying APIs / study data parameter were removed.
> (Apparently studying is cheap enough that it's always done during
> pattern compilation.)


Yes, it seemed like a good idea to remove the (apparently) unnecessary
complication, and always gain the performance advantage.

> Now the optional study step is only done when JIT compiling a pattern
> through pcre2_jit_compile, which operates on the very same pcre2_code
> object returned by pcre2_compile.
>
> However, this opens a question about the thread safety of this
> operation. Say we have the scenario depicted above -- two threads both
> matching using the same compiled pattern, but one thread decides to
> also jit-compile the pattern. Is this combination threadsafe? If not,
> are there any recommended workarounds?


We need Zoltán to answer this in detail, but looking at the code makes
me think this is not thread-safe. It's not a scenario that had occurred
to me.

If there is no other workaround, I suppose the only thing to do is to
have some kind of lock that stops other threads from calling
pcre2_match() while one of them is running pcre2_jit_compile() for the
same compiled pattern. This does not sound very satisfactory.

I have made a note to update the documentation to cover this situation,
once we have got clarification (and decided whether or not to change
anything).

Philip

--
Philip Hazel