From 1d21f73a2d563ffbb924a4244c29b35e898caefe Mon Sep 17 00:00:00 2001 From: Zoe Zuser Date: Wed, 28 May 2025 15:02:52 -0400 Subject: [PATCH] fix race with getStore() (#45) by calling it once before starting the server closes: #44 --- cbits/nix.cpp | 6 ++++++ src/Main.hs | 2 ++ src/Nix.hsc | 2 ++ 3 files changed, 10 insertions(+) diff --git a/cbits/nix.cpp b/cbits/nix.cpp index 8dbd715..80d5b81 100644 --- a/cbits/nix.cpp +++ b/cbits/nix.cpp @@ -37,6 +37,12 @@ static ref getStore() extern "C" { +// Must be called once before the server is stated to avoid races +void initStore() +{ + getStore(); +} + void freeString(struct string * const input) { free((void *) input->data); diff --git a/src/Main.hs b/src/Main.hs index 7201610..f7f354d 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -341,6 +341,8 @@ main = do options@Options{ priority, timeout, verbosity } <- do Options.execParser Options.parserInfo + Nix.initStore + storeDirectory <- Nix.getStoreDir secretKeyFile <- Environment.lookupEnv "NIX_SECRET_KEY_FILE" diff --git a/src/Nix.hsc b/src/Nix.hsc index 0bd007d..c4313c0 100644 --- a/src/Nix.hsc +++ b/src/Nix.hsc @@ -34,6 +34,8 @@ import qualified Foreign #include "nix.hh" +foreign import ccall "initStore" initStore :: IO () + foreign import ccall "freeString" freeString :: Ptr String_ -> IO () data String_ = String_ { data_ :: Ptr CChar, size :: CSize }