diff options
Diffstat (limited to 'src/permdb.erl')
-rw-r--r-- | src/permdb.erl | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/permdb.erl b/src/permdb.erl index 461b8b3..ba9fd72 100644 --- a/src/permdb.erl +++ b/src/permdb.erl @@ -5,7 +5,7 @@ -behaviour(gen_server). --export([start_link/2, stop/1, init_module/0]). +-export([start_link/2, start_link/3, stop/1, init_module/0]). -export([getvalue/2, addvalue/3, commit/1, commit/2, keyexists/2]). %% gen_server callbacks. @@ -40,12 +40,18 @@ commit(Name) -> commit(Name, Timeout) -> gen_server:call(Name, {commit}, Timeout). -init([Name, Filename]) -> +init([Name, Filename, WriteFlag]) -> Cachename = list_to_atom(atom_to_list(Name) ++ "_cache"), ets:new(Cachename, [set, public, named_table]), process_flag(trap_exit, true), + WriteFlagArg = case WriteFlag of + write -> + []; + _ -> + ["nolock"] + end, Port = open_port({spawn_executable, code:priv_dir(plop) ++ "/permdbport"}, - [{packet, 4}, {args, [Filename]}, binary]), + [{packet, 4}, {args, [Filename | WriteFlagArg]}, binary]), {ok, #state{cachename = Cachename, name = Name, port = Port, @@ -56,8 +62,11 @@ init_module() -> ok. start_link(Name, Filename) -> + start_link(Name, Filename, write). + +start_link(Name, Filename, WriteFlag) -> gen_server:start_link({local, Name}, ?MODULE, - [Name, Filename], []). + [Name, Filename, WriteFlag], []). stop(Name) -> gen_server:call(Name, stop). |