Index: src/data_config.c =================================================================== --- src/data_config.c (revision 2805) +++ src/data_config.c (working copy) @@ -28,8 +28,14 @@ if (ds->string) buffer_free(ds->string); #ifdef HAVE_PCRE_H if (ds->regex) pcre_free(ds->regex); - if (ds->regex_study) pcre_free(ds->regex_study); + if (ds->regex_study) { +#ifdef PCRE_CONFIG_JIT + pcre_free_study(ds->regex_study); +#else + pcre_free(ds->regex_study); #endif + } +#endif free(d); } Index: src/configparser.y =================================================================== --- src/configparser.y (revision 2805) +++ src/configparser.y (working copy) @@ -471,6 +471,11 @@ #ifdef HAVE_PCRE_H const char *errptr; int erroff, captures; +#ifdef PCRE_STUDY_JIT_COMPILE + static int study_options = PCRE_STUDY_JIT_COMPILE; +#else + static int study_options = 0; +#endif if (NULL == (dc->regex = pcre_compile(rvalue->ptr, 0, &errptr, &erroff, NULL))) { @@ -482,7 +487,7 @@ ctx->ok = 0; } else if (NULL == (dc->regex_study = - pcre_study(dc->regex, 0, &errptr)) && + pcre_study(dc->regex, study_options, &errptr)) && errptr != NULL) { fprintf(stderr, "studying regex failed: %s -> %s\n", rvalue->ptr, errptr); Index: src/keyvalue.c =================================================================== --- src/keyvalue.c (revision 2805) +++ src/keyvalue.c (working copy) @@ -319,7 +319,12 @@ const char *errptr; int erroff; pcre_keyvalue *kv; +#ifdef PCRE_STUDY_JIT_COMPILE + static int study_options = PCRE_STUDY_JIT_COMPILE; +#else + static int study_options = 0; #endif +#endif if (!key) return -1; @@ -352,7 +357,7 @@ return -1; } - if (NULL == (kv->key_extra = pcre_study(kv->key, 0, &errptr)) && + if (NULL == (kv->key_extra = pcre_study(kv->key, study_options, &errptr)) && errptr != NULL) { return -1; } @@ -378,7 +383,13 @@ for (i = 0; i < kvb->size; i++) { kv = kvb->kv[i]; if (kv->key) pcre_free(kv->key); - if (kv->key_extra) pcre_free(kv->key_extra); + if (kv->key_extra) { +#ifdef PCRE_STUDY_JIT_COMPILE + pcre_free_study(kv->key_extra); +#else + pcre_free(kv->key_extra); +#endif + } if (kv->value) buffer_free(kv->value); free(kv); }