Browse Source

ft: 完善

master
SisMaker 3 years ago
parent
commit
2beec42e2b
1 changed files with 16 additions and 10 deletions
  1. +16
    -10
      c_src/eLfq/eLfq.cc

+ 16
- 10
c_src/eLfq/eLfq.cc View File

@ -76,6 +76,9 @@ ERL_NIF_TERM nifNew(ErlNifEnv *env, int, const ERL_NIF_TERM *) {
if (ObjIns == NULL) if (ObjIns == NULL)
return atomNewErr; return atomNewErr;
if (*ObjIns == NULL)
return atomNewErr;
ERL_NIF_TERM RefTerm = enif_make_resource(env, ObjIns); ERL_NIF_TERM RefTerm = enif_make_resource(env, ObjIns);
enif_release_resource(ObjIns); enif_release_resource(ObjIns);
return enif_make_tuple2(env, atomOk, RefTerm); return enif_make_tuple2(env, atomOk, RefTerm);
@ -90,13 +93,16 @@ ERL_NIF_TERM nifDel1(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]) {
return enif_make_badarg(env); return enif_make_badarg(env);
} }
if (NULL != ObjIns) {
ErlNifBinary TermBin;
while ((*ObjIns)->try_dequeue(TermBin)) {
enif_release_binary(&TermBin);
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]);
} }
delete ObjIns;
delete (*ObjIns);
*ObjIns = NULL;
} }
return atomOk; return atomOk;
@ -107,7 +113,7 @@ ERL_NIF_TERM nifIn2(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]) {
lfqIns *ObjIns = NULL; lfqIns *ObjIns = NULL;
if (!enif_get_resource(env, argv[0], ResIns, (void **) &ObjIns)) {
if (!enif_get_resource(env, argv[0], ResIns, (void **) &ObjIns) || NULL == *ObjIns) {
return enif_make_badarg(env); return enif_make_badarg(env);
} }
@ -128,7 +134,7 @@ ERL_NIF_TERM nifIns2(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]) {
lfqIns *ObjIns = NULL; lfqIns *ObjIns = NULL;
if (!enif_get_resource(env, argv[0], ResIns, (void **) &ObjIns)) {
if (!enif_get_resource(env, argv[0], ResIns, (void **) &ObjIns) || NULL == *ObjIns) {
return enif_make_badarg(env); return enif_make_badarg(env);
} }
@ -171,7 +177,7 @@ ERL_NIF_TERM nifTryOut1(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]) {
ErlNifResourceType *ResIns = static_cast<ErlNifResourceType *>(enif_priv_data(env)); ErlNifResourceType *ResIns = static_cast<ErlNifResourceType *>(enif_priv_data(env));
lfqIns *ObjIns = NULL; lfqIns *ObjIns = NULL;
if (!enif_get_resource(env, argv[0], ResIns, (void **) &ObjIns)) {
if (!enif_get_resource(env, argv[0], ResIns, (void **) &ObjIns) || NULL == *ObjIns) {
return enif_make_badarg(env); return enif_make_badarg(env);
} }
@ -195,7 +201,7 @@ ERL_NIF_TERM nifTryOuts2(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]) {
ErlNifResourceType *ResIns = static_cast<ErlNifResourceType *>(enif_priv_data(env)); ErlNifResourceType *ResIns = static_cast<ErlNifResourceType *>(enif_priv_data(env));
lfqIns *ObjIns = NULL; lfqIns *ObjIns = NULL;
if (!enif_get_resource(env, argv[0], ResIns, (void **) &ObjIns)) {
if (!enif_get_resource(env, argv[0], ResIns, (void **) &ObjIns) || NULL == *ObjIns) {
return enif_make_badarg(env); return enif_make_badarg(env);
} }
@ -225,7 +231,7 @@ ERL_NIF_TERM nifSize1(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]) {
ErlNifResourceType *ResIns = static_cast<ErlNifResourceType *>(enif_priv_data(env)); ErlNifResourceType *ResIns = static_cast<ErlNifResourceType *>(enif_priv_data(env));
lfqIns *ObjIns = NULL; lfqIns *ObjIns = NULL;
if (!enif_get_resource(env, argv[0], ResIns, (void **) &ObjIns)) {
if (!enif_get_resource(env, argv[0], ResIns, (void **) &ObjIns) || NULL == *ObjIns) {
return enif_make_badarg(env); return enif_make_badarg(env);
} }

Loading…
Cancel
Save