[erlang-questions] Where is enif_keep_binary?

Max Lapshin <>
Mon Aug 22 08:10:15 CEST 2011


I start enif_thread_create and pass binary to there:


static ERL_NIF_TERM yuv_x264(ErlNifEnv* env, int argc, const
ERL_NIF_TERM argv[]) {
   ....
   enif_mutex_lock(x264->lock);
   enif_inspect_binary(env, argv[1], &x264->yuv);
   x264->has_yuv = 1;
   enif_cond_signal(x264->cond);
   enif_mutex_unlock(x264->lock);
   return enif_make_atom(env, "wait");
}

and in thread I make:


while(1) {
  while(!x264->has_yuv) {
    enif_cond_wait(x264->cond, x264->lock);
  }

  handle(x264->yuv);
}

Problem is that binary get expired. How should I add refcounter to binary?
Copy it to other env?



More information about the erlang-questions mailing list