Go to file
Giuseppe D'Angelo 9ca635482d PCRE2: port QRegularExpression to PCRE2
PCRE1 is going towards EOL. PCRE2 is the way forward in terms
of new features, performance, and security improvements. The
APIs that QRegularExpression uses are similar so the required
modifications aren't extensive.

The biggest difference comes to JIT-compiling of the pattern.

In PCRE1, JIT-compiling did not modify the processed PCRE pattern,
but returned a new chunk of data.

This allowed multiple threads to keep matching using the same
processed data and NULL for the JIT data, until a thread
JIT-compiled and atomically set the shared JIT data to the results
of the compilation.

In PCRE2, JIT-compiling _modifies_ the processed PCRE pattern in a
way that it's thread unsafe [1]; the results of JIT-compilation
are stored somewhere inside the processed pattern.
This means the above approach cannot work -- a thread may be
matching while another one JIT-compiles, causing a data race.

While waiting for better workarounds from upstream, employ a
read/write mutex to protect the matching from JIT-compilation.

[1] https://lists.exim.org/lurker/message/20160104.105831.3cb25b39.en.html

[ChangeLog][General] QRegularExpression now requires the PCRE2
library, at least version 10.20. Support for the PCRE1 library
has been dropped. A copy of PCRE2 is shipped with Qt and will
automatically be used on those platforms which lack it.

Change-Id: I9fe11104230a096796df2d0bdcea861acf769f57
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2016-12-12 15:22:01 +00:00
bin don't include injected headers into linker version script 2016-10-14 09:00:29 +00:00
config.tests PCRE2: port QRegularExpression to PCRE2 2016-12-12 15:22:01 +00:00
dist Merge remote-tracking branch 'origin/5.6' into 5.7 2016-09-28 11:51:35 +02:00
doc TouchPoint: add horizontalDiameter, verticalDiameter; deprecate rects 2016-12-07 08:33:35 +00:00
examples Merge remote-tracking branch 'origin/5.8' into dev 2016-11-17 14:43:26 +01:00
lib Purge all fonts 2015-08-18 19:59:14 +00:00
mkspecs Introduce CI20 mips32 mkspec 2016-12-05 11:59:31 +00:00
qmake Merge remote-tracking branch 'origin/5.8' into dev 2016-11-17 14:43:26 +01:00
src PCRE2: port QRegularExpression to PCRE2 2016-12-12 15:22:01 +00:00
tests tst_QTimeZone::printTimeZone: pass zone by reference 2016-12-12 13:59:17 +00:00
tools Merge remote-tracking branch 'origin/5.8' into dev 2016-11-17 14:43:26 +01:00
util Handle indirect sibling selector 2016-07-27 20:18:02 +00:00
.gitattributes Update the git-archive export options 2012-09-07 15:39:31 +02:00
.gitignore rename configure.exe => configureapp.exe 2016-10-04 08:25:08 +00:00
.qmake.conf Bump version 2016-08-29 14:35:49 +02:00
.tag Update the git-archive export options 2012-09-07 15:39:31 +02:00
config_help.txt PCRE2: port QRegularExpression to PCRE2 2016-12-12 15:22:01 +00:00
configure Merge remote-tracking branch 'origin/5.8' into dev 2016-11-17 14:43:26 +01:00
configure.bat rename configure.exe => configureapp.exe 2016-10-04 08:25:08 +00:00
configure.json Merge remote-tracking branch 'origin/5.8' into dev 2016-11-17 14:43:26 +01:00
configure.pri configure: turn qtConfOutputPostProcess_*() callbacks into replace functions 2016-11-15 22:44:41 +00:00
header.BSD Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.BSD-OLD Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.COMM Add header template for commercial only modules 2015-10-19 10:37:18 +00:00
header.FDL Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.FDL-OLD Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.GPL Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.GPL-EXCEPT Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.LGPL Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.LGPL3 Update copyright headers 2015-02-11 06:49:51 +00:00
header.LGPL3-COMM Update copyright headers 2015-02-11 06:49:51 +00:00
header.LGPL21 Update copyright headers 2015-02-11 06:49:51 +00:00
header.LGPL-NOGPL2 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
header.LGPL-ONLY Update copyright headers 2015-02-11 06:49:51 +00:00
INSTALL Doc: Update links in INSTALL file 2015-02-16 09:06:41 +00:00
LGPL_EXCEPTION.txt Update copyright headers 2015-02-11 06:49:51 +00:00
LICENSE.FDL Initial import from the monolithic Qt. 2011-04-27 12:05:43 +02:00
LICENSE.GPL2 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.GPL3 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.GPL3-EXCEPT Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.GPLv3 Expand license scope from "Qt GUI Toolkit" to "Qt Toolkit" 2016-06-15 07:02:32 +00:00
LICENSE.LGPL3 Add new license header templates and license files 2016-01-14 20:43:46 +00:00
LICENSE.LGPLv3 Expand license scope from "Qt GUI Toolkit" to "Qt Toolkit" 2016-06-15 07:02:32 +00:00
LICENSE.LGPLv21 Expand license scope from "Qt GUI Toolkit" to "Qt Toolkit" 2016-06-15 07:02:32 +00:00
LICENSE.PREVIEW.COMMERCIAL Add new license header templates and license files 2016-01-14 20:43:46 +00:00
qtbase.pro Merge remote-tracking branch 'origin/5.7' into 5.8 2016-10-06 20:12:27 +02:00
sync.profile Merge remote-tracking branch 'origin/5.8' into dev 2016-11-17 14:43:26 +01:00