summaryrefslogtreecommitdiff
path: root/src/permdb.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/permdb.erl')
-rw-r--r--src/permdb.erl17
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).