Преглед изворни кода

Merge remote-tracking branch 'origin/master'

master
SisMaker пре 3 година
родитељ
комит
426f0a6f5a
4 измењених фајлова са 22 додато и 12 уклоњено
  1. +0
    -0
      c_src/Lfq/MPMC.md
  2. +0
    -0
      c_src/Lfq/concurrentqueue.h
  3. +22
    -12
      c_src/Lfq/eLfq.cc
  4. +0
    -0
      c_src/Lfq/rebar.config

c_src/eLfq/MPMC.md → c_src/Lfq/MPMC.md Прегледај датотеку


c_src/eLfq/concurrentqueue.h → c_src/Lfq/concurrentqueue.h Прегледај датотеку


c_src/eLfq/eLfq.cc → c_src/Lfq/eLfq.cc Прегледај датотеку

@ -18,6 +18,8 @@ struct NifTraits : public moodycamel::ConcurrentQueueDefaultTraits {
using lfqIns = moodycamel::ConcurrentQueue<ErlNifBinary, NifTraits> *;
const size_t BulkDelCnt = 200;
ERL_NIF_TERM atomOk;
ERL_NIF_TERM atomError;
ERL_NIF_TERM atomNewErr;
@ -27,13 +29,19 @@ ERL_NIF_TERM atomEmpty;
void eLfqFree(ErlNifEnv *, void *obj) {
lfqIns *ObjIns = static_cast<lfqIns *>(obj);
if (ObjIns != nullptr) {
ErlNifBinary TermBin;
while ((*ObjIns)->try_dequeue(TermBin)) {
enif_release_binary(&TermBin);
}
delete ObjIns;
if (NULL != ObjIns && NULL != *ObjIns) {
std::vector <ErlNifBinary> TermBinList(BulkDelCnt);
size_t OutSize;
do{
OutSize = (*ObjIns)->try_dequeue_bulk(TermBinList.begin(), TermBinList.size());
for (int i = OutSize - 1; i >= 0; i--) {
enif_release_binary(&TermBinList[i]);
}
}while(OutSize >= BulkDelCnt);
delete (*ObjIns);
*ObjIns = NULL;
}
}
@ -95,12 +103,14 @@ ERL_NIF_TERM nifDel1(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]) {
}
if (NULL != ObjIns && NULL != *ObjIns) {
std::vector <ErlNifBinary> TermBinList(20);
size_t OutSize = (*ObjIns)->try_dequeue_bulk(TermBinList.begin(), TermBinList.size());
for (int i = OutSize - 1; i >= 0; i--) {
enif_release_binary(&TermBinList[i]);
}
std::vector <ErlNifBinary> TermBinList(BulkDelCnt);
size_t OutSize;
do{
OutSize = (*ObjIns)->try_dequeue_bulk(TermBinList.begin(), TermBinList.size());
for (int i = OutSize - 1; i >= 0; i--) {
enif_release_binary(&TermBinList[i]);
}
}while(OutSize >= BulkDelCnt);
delete (*ObjIns);
*ObjIns = NULL;

c_src/eLfq/rebar.config → c_src/Lfq/rebar.config Прегледај датотеку


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