是什么导致 grpc exec_ctx starting_cpu 成为垃圾值?

What could be causing grpc exec_ctx starting_cpu to be a garbage value?

我正在尝试调试使用 grpc 的库中的访问冲突错误。这个错误似乎只起源于在 arm64 Windows 设备 (Hololens 2) 上构建的 arm32。从症状上看,exec_ctx 的 starting_cpu_ 成员在创建后立即被分配了一些垃圾值,这会在通过内部方法操作时导致访问冲突。

具体来说,例如在 core\lib\surface\channel.cc 的第 485 行 grpc_channel_create_registered_call(grpc_channel * 通道, grpc_call * parent_call, unsigned int propagation_mask, grpc_completion_queue * completion_queue, void * registered_call_handle, gpr_timespec 截止日期,无效 * 保留)

exec_ctx.starting_cpu_ 赋值为 1610612848,这显然是不正确的。这只会在我们拆除会话并重新启动它(涉及关闭完成队列并创建新队列)后的特定设置中发生。

什么可以修改 starting_cpu_ 值(或者,正如我怀疑的那样,内部 exec_ctx 指针线程本地存储) 创建上下文之后?

我在客户端和服务上使用 grpc v1.29.1。

谢谢!

这个有点傻。事实证明,只有当 运行 ARM64 Snapdragon 845/850 设备上的 ARM32 用户模式应用程序时,才会导致调用 GetProcessorNumber() 以获取垃圾值时出现 OS/Silicon 级错误。具体错误已在上游修复,并将很快在 Windows 版本中推出。