• 中文交流区 反馈
  • openresty 1.15版本 arm64环境下,概率性出现table取值错误(number变为bool))

  1. 环境
    openresty1.15,jit使用的是openresty维护的分支(2020年1月份的),硬件是arm64
  2. 问题
    几百台设备,只有几台设备的某个进程会持续报错,attempt to perform arithmetic on local ‘id’(a boolean value),代码的第二行报的错
  3. 代码行(session是一个lua module定义的可以认为全局变量的table,business是session的一个table)
    local id = session.business['id']
    local test = id + 1
  4. gdb分析
    a. 通过gdb分析,session的内存如下:
    lval (TValue)0x40031477b240
    ...
    key:
    string: "business"(len 8 )
    value:
    table: (TValue
    )0x4003169120f8
    ...
    b. 继续打印0x4003169120f8的内容
    lval (TValue*)0x4003169120f8
    ...
    key:
    string: "id"(len 2)
    value:
    number 0
    c. 上面的内存信息,是在报错的时候,打印的(gdb挂断点),也就是说business table里面id存的value还是一个number类型的0,但是取出来的时候,却变成了一个bool的true(几百台设备,只有几台出问题,而且是某个进程,一旦出问题后,会一直报错)
    6 days later
    Write a Reply...