跳到主要内容
CNode

addon模块ssl静态编译问题。

问答
Ddreamyzhang发布于 9 年前最后回复 9 年前
229900

Question 1:

程序执行一段时间后会coredump 报下面的错误(我修改node源码注释了报错这行assert判断就能正常运行):
node: src/threadpool.c:252: uv__queue_done: Assertion `(((const QUEUE ) (&(req->loop)->active_reqs) == (const QUEUE ) ((QUEUE **) &(((&(req->loop)->active_reqs))[0]))) == 0)' failed.

Question 2:

用nvm安装node, 这个node是静态编译进去了ssl。 yum安装的是动态加载系统的ssl模块的。 我的addon中包含了一个已经静态编译ssl模块的so。 这个用nvm安装的node执行会coredump, yum安装的可以正常执行。 导致了没办法用nvm管理版本(不能用nvm)。

查看回复

回复 (2)

D
dreamyzhang#29 年前

@# for Question1

static void uv__queue_done(struct uv__work* w, int err) {
  uv_work_t* req;                                        
  req = container_of(w, uv_work_t, work_req);            
  uv__req_unregister(req->loop, req);                    
  if (req->after_work_cb == NULL)                        
    return;                                                                                          
  req->after_work_cb(req, err);                          
}                                                        
#define uv__req_unregister(loop, req)           
  do {                                          
    assert(uv__has_active_reqs(loop));          
    QUEUE_REMOVE(&(req)->active_queue);         
  }                                             
  while (0)

#define uv__has_active_reqs(loop)            
  (QUEUE_EMPTY(&(loop)->active_reqs) == 0) 

#define QUEUE_EMPTY(q)                                                  
  ((const QUEUE *) (q) == (const QUEUE *) QUEUE_NEXT(q))                

I tried to remove the assert, and recompile node , and it is excute normally. But why is this so? and what can I do for support all the version of node?

D
dreamyzhang#19 年前

@# for Question2 as @example : thosttraderapi.so 静态连接的ssl 第三方的不能改变。 nvm管理的node也是静态编译的ssl,执行必core. 看到node官方是最近的版本默认加入的ssl静态编译。 [ops@smartwindev linux_api_trade_6.3.6]$ nm thosttraderapi.so | grep SSL | more 00000000001dcac0 T d2i_SSL_SESSION 000000000020c4a0 T DH_OpenSSL 000000000027a810 T DSA_OpenSSL 000000000027eea0 T ECDH_OpenSSL 000000000027cd90 T ECDSA_OpenSSL 00000000001ded60 T ERR_load_SSL_strings 000000000011ece0 t _GLOBAL__I_SSL_NETWORK_NAME 00000000001de060 T i2d_SSL_SESSION 000000000021ce20 T OPENSSL_add_all_algorithms_noconf 000000000021ce40 T OpenSSL_add_all_ciphers 000000000021d5b0 T OpenSSL_add_all_digests 0000000000243a40 T OPENSSL_asc2uni 00000000001f9ab0 T OPENSSL_atomic_add

参与回复

登录后即可参与回复。登录