Ensure libvips is initialised only once #2143

This commit is contained in:
Lovell Fuller 2020-03-29 19:40:46 +01:00
parent ecd01afad3
commit 6ed1f49ad3
2 changed files with 12 additions and 1 deletions

View File

@ -4,6 +4,11 @@
Requires libvips v8.9.1 Requires libvips v8.9.1
### v0.25.3 - TBD
* Ensure libvips is initialised only once, improves worker thread safety.
[#2143](https://github.com/lovell/sharp/issues/2143)
### v0.25.2 - 20th March 2020 ### v0.25.2 - 20th March 2020
* Provide prebuilt binaries for Linux ARM64v8. * Provide prebuilt binaries for Linux ARM64v8.

View File

@ -21,8 +21,14 @@
#include "utilities.h" #include "utilities.h"
#include "stats.h" #include "stats.h"
Napi::Object init(Napi::Env env, Napi::Object exports) { static void* sharp_vips_init(void*) {
vips_init("sharp"); vips_init("sharp");
return nullptr;
}
Napi::Object init(Napi::Env env, Napi::Object exports) {
static GOnce sharp_vips_init_once = G_ONCE_INIT;
g_once(&sharp_vips_init_once, static_cast<GThreadFunc>(sharp_vips_init), nullptr);
g_log_set_handler("VIPS", static_cast<GLogLevelFlags>(G_LOG_LEVEL_WARNING), g_log_set_handler("VIPS", static_cast<GLogLevelFlags>(G_LOG_LEVEL_WARNING),
static_cast<GLogFunc>(sharp::VipsWarningCallback), nullptr); static_cast<GLogFunc>(sharp::VipsWarningCallback), nullptr);