Skip to content

Commit dda5ade

Browse files
authored
feat(getLlama): build: "autoAttempt" (#564)
* feat(`getLlama`): `build: "autoAttempt"` * feat: get rid of octokit * fix(CLI): disable Direct I/O by default * fix: Bun segmentation fault on process exit with undisposed `Llama` * fix: detect glibc inside Nix * fix: stricter CI build flag * chore: update `simple-git` * chore: switch off of `tsconfig.json` deprecated configs * docs: clarify `getLlama`'s `build` option logic
1 parent 6faa5ae commit dda5ade

File tree

33 files changed

+467
-362
lines changed

33 files changed

+467
-362
lines changed

.vitepress/tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"compilerOptions": {
33
"lib": ["es2022", "dom"],
4-
"module": "es2022",
4+
"module": "node16",
55
"target": "es2022",
66
"esModuleInterop": true,
77
"noImplicitAny": true,

llama/addon/addon.cpp

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
#include "globals/getMemoryInfo.h"
1313

1414
#include <atomic>
15+
#include <cstdlib>
16+
#include <mutex>
1517

18+
std::mutex backendMutex;
1619
bool backendInitialized = false;
1720
bool backendDisposed = false;
1821

@@ -118,6 +121,8 @@ class AddonBackendLoadWorker : public Napi::AsyncWorker {
118121

119122
void Execute() {
120123
try {
124+
std::lock_guard<std::mutex> lock(backendMutex);
125+
121126
llama_backend_init();
122127

123128
try {
@@ -163,6 +168,8 @@ class AddonBackendUnloadWorker : public Napi::AsyncWorker {
163168
Napi::Promise::Deferred deferred;
164169

165170
void Execute() {
171+
std::lock_guard<std::mutex> lock(backendMutex);
172+
166173
try {
167174
if (backendInitialized) {
168175
backendInitialized = false;
@@ -234,6 +241,8 @@ Napi::Value markLoaded(const Napi::CallbackInfo& info) {
234241
}
235242

236243
Napi::Value addonInit(const Napi::CallbackInfo& info) {
244+
std::lock_guard<std::mutex> lock(backendMutex);
245+
237246
if (backendInitialized) {
238247
Napi::Promise::Deferred deferred = Napi::Promise::Deferred::New(info.Env());
239248
deferred.Resolve(info.Env().Undefined());
@@ -246,6 +255,8 @@ Napi::Value addonInit(const Napi::CallbackInfo& info) {
246255
}
247256

248257
Napi::Value addonDispose(const Napi::CallbackInfo& info) {
258+
std::lock_guard<std::mutex> lock(backendMutex);
259+
249260
if (backendDisposed) {
250261
Napi::Promise::Deferred deferred = Napi::Promise::Deferred::New(info.Env());
251262
deferred.Resolve(info.Env().Undefined());
@@ -259,7 +270,8 @@ Napi::Value addonDispose(const Napi::CallbackInfo& info) {
259270
return worker->GetPromise();
260271
}
261272

262-
static void addonFreeLlamaBackend(Napi::Env env, int* data) {
273+
static void addonFreeLlamaBackend() {
274+
std::lock_guard<std::mutex> lock(backendMutex);
263275
if (backendDisposed) {
264276
return;
265277
}
@@ -270,6 +282,9 @@ static void addonFreeLlamaBackend(Napi::Env env, int* data) {
270282
llama_backend_free();
271283
}
272284
}
285+
static void addonFreeLlamaBackendFromFinalizer(Napi::Env env, int* data) {
286+
addonFreeLlamaBackend();
287+
}
273288

274289
Napi::Object registerCallback(Napi::Env env, Napi::Object exports) {
275290
exports.DefineProperties({
@@ -306,8 +321,8 @@ Napi::Object registerCallback(Napi::Env env, Napi::Object exports) {
306321

307322
llama_log_set(addonLlamaCppLogCallback, nullptr);
308323

309-
exports.AddFinalizer(addonFreeLlamaBackend, static_cast<int*>(nullptr));
310-
324+
exports.AddFinalizer(addonFreeLlamaBackendFromFinalizer, static_cast<int*>(nullptr));
325+
env.AddCleanupHook(addonFreeLlamaBackend);
311326
return exports;
312327
}
313328

0 commit comments

Comments
 (0)