一、前提说明1. 项目本身为了简单,将所有的beam文件最终都部署在同一个ebin目录下(无层次结构),包括第三方deps,目录结构如下:2. deps中使用到了esqlite这个开源库(esqlite),这是个基于nif的erlang sqlite二、问题说明在我给esqlite添加热更新支持之后,遇到个问题:strace:[{esqlite3_nif,prepare,[,#Ref,,"select * from t_job"],[]},{esqlite3,prepare,3,[{file,"src/esqlite3.erl"},{line,229}]},{esqlite3,q,3,[{file,"src/esqlite3.erl"},{line,75}]},跟踪时发现在reload时nif的两个static resource指针被重置了,这两个resource初始化代码如下:static ErlNifResourceType *esqlite_connection_type = NULL;
static ErlNifResourceType *esqlite_statement_type = NULL;
rt = enif_open_resource_type(env, "esqlite3_nif", "esqlite_connection_type",
destruct_e
...
继续阅读
(36)