SisMaker пре 1 година
родитељ
комит
8e75a7ea97
8 измењених фајлова са 54 додато и 44 уклоњено
  1. +19
    -0
      c_src/eGPidInt/eGPidInt.c
  2. +7
    -0
      c_src/eGPidInt/rebar.config
  3. +0
    -7
      c_src/termInt/rebar.config
  4. +0
    -12
      c_src/termInt/termInt.c
  5. +1
    -1
      src/eALock.erl
  6. +1
    -1
      src/eALockMgr.erl
  7. +26
    -0
      src/eGPidInt.erl
  8. +0
    -23
      src/termInt.erl

+ 19
- 0
c_src/eGPidInt/eGPidInt.c Прегледај датотеку

@ -0,0 +1,19 @@
#include "erl_nif.h"
#include <stdio.h>
static ERL_NIF_TERM pidToInt(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
ErlNifUInt64 TermInt = (ErlNifUInt64)argv[0];
return enif_make_uint64(env, TermInt);
}
static ERL_NIF_TERM intToPid(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
ERL_NIF_TERM TermPid = (ERL_NIF_TERM)enif_get_uint64(argv[0]);
return TermPid;
}
static ErlNifFunc nif_funcs[] = {
{"pidToInt", 1, pidToInt},
{"intToPid", 1, intToPid}
};
ERL_NIF_INIT(eGPidInt, nif_funcs, NULL, NULL, NULL, NULL);

+ 7
- 0
c_src/eGPidInt/rebar.config Прегледај датотеку

@ -0,0 +1,7 @@
{port_specs, [
{"../../priv/eGPidInt.so", ["*.c"]}
]}.

+ 0
- 7
c_src/termInt/rebar.config Прегледај датотеку

@ -1,7 +0,0 @@
{port_specs, [
{"../../priv/termInt.so", ["*.c"]}
]}.

+ 0
- 12
c_src/termInt/termInt.c Прегледај датотеку

@ -1,12 +0,0 @@
#include "erl_nif.h"
#include <stdio.h>
static ERL_NIF_TERM termInt(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
ErlNifUInt64 TermInt = (ErlNifUInt64)argv[0];
return enif_make_uint64(env, TermInt);
}
static ErlNifFunc nif_funcs[] = {
{"termInt", 1, termInt}
};
ERL_NIF_INIT(termInt, nif_funcs, NULL, NULL, NULL, NULL);

+ 1
- 1
src/eALock.erl Прегледај датотеку

@ -17,7 +17,7 @@ lockApply(KeyOrKeys, MFAOrFun, TimeOut) ->
GLockMgrPid = persistent_term:get(?eALockMgr),
ALockRef = persistent_term:get(?eALockRef),
CurPid = self(),
PidInt = termInt:termInt(CurPid),
PidInt = eGPidInt:termInt(CurPid),
case is_list(KeyOrKeys) of
true ->
KeyIxs = getKexIxs(KeyOrKeys, []),

+ 1
- 1
src/eALockMgr.erl Прегледај датотеку

@ -38,7 +38,7 @@ handle_info({'EXIT', Pid, _Reason}, State) ->
[] -> ignore;
[{_Pid, KeyIxOrKeyIxs}] ->
ALockRef = persistent_term:get(?eALockRef),
PidInt = termInt:termInt(Pid),
PidInt = eGPidInt:termInt(Pid),
case is_integer(KeyIxOrKeyIxs) of
true ->
atomics:compare_exchange(ALockRef, KeyIxOrKeyIxs, PidInt, 0);

+ 26
- 0
src/eGPidInt.erl Прегледај датотеку

@ -0,0 +1,26 @@
-module(eGPidInt).
-export([pidToInt/1, intToPid/1]).
-on_load(init/0).
init() ->
SoName =
case code:priv_dir(?MODULE) of
{error, _} ->
case code:which(?MODULE) of
Filename when is_list(Filename) ->
filename:join([filename:dirname(Filename), "../priv", "eGPidInt"]);
_ ->
filename:join("../priv", "eGPidInt")
end;
Dir ->
filename:join(Dir, "eGPidInt")
end,
erlang:load_nif(SoName, 0).
pidToInt(_Term) ->
erlang:nif_error({not_loaded, [{module, ?MODULE}, {line, ?LINE}]}).
intToPid(_Term) ->
erlang:nif_error({not_loaded, [{module, ?MODULE}, {line, ?LINE}]}).

+ 0
- 23
src/termInt.erl Прегледај датотеку

@ -1,23 +0,0 @@
-module(termInt).
-export([termInt/1]).
-on_load(init/0).
init() ->
SoName =
case code:priv_dir(?MODULE) of
{error, _} ->
case code:which(?MODULE) of
Filename when is_list(Filename) ->
filename:join([filename:dirname(Filename), "../priv", "termInt"]);
_ ->
filename:join("../priv", "termInt")
end;
Dir ->
filename:join(Dir, "termInt")
end,
erlang:load_nif(SoName, 0).
termInt(_Term) ->
erlang:error({"NIF not implemented in nif_test at line", ?LINE}).

Loading…
Откажи
Сачувај