hooksInitPolicy.md 1.4 KB

RyanJsonInitHooks 初始化规范(RT-Thread 导向)

范围

  • 本页只定义 hooks 初始化策略与上板检查点。
  • 通用 API 调用顺序见 quickstart.md

规则

  • RyanJsonInitHooks 是 RyanJson 前置条件,必须在任何 API 前调用。
  • 建议在系统启动阶段只初始化一次。
  • 初始化失败必须可观测(日志/错误码),并阻断后续 Json 逻辑。

RT-Thread 推荐位置

  • 应用初始化阶段(如 INIT_APP_EXPORT)。
  • 或 Json owner 线程启动阶段(需保证先于业务调用)。

实现建议

  • 映射 rt_malloc/rt_free/rt_realloc 或自定义内存池封装。
  • 保证 realloc 失败返回 NULL 且不破坏原指针语义。
  • 建议记录分配失败次数和峰值占用,便于板端排障。

线程模型建议

  • 库本身不承诺线程安全。
  • 推荐单 owner 线程独占 Json 树。
  • 多线程共享时,用外层锁保护完整事务。

上板检查清单

  • hooks 是否在首次 Parse/Create 前成功执行。
  • hooks 失败时是否正确阻断业务路径。
  • 常用 API 成功/失败路径是否都能返回并正确释放。

依据(仓库内)

  • RyanJson/RyanJson.cjsonMalloc/jsonFree/jsonRealloc 为全局 hooks,默认 NULL
  • test/unityTest/common/testCommon.c:测试入口先 RyanJsonInitHooks(...)
  • test/fuzzer/entry.cLLVMFuzzerTestOneInput 内先校验并初始化 hooks