存储基于C的Native Client实例的用户数据

时间:2012-04-29 05:18:39

标签: c google-chrome google-nativeclient

我一直在为Google Chrome开发基于C的Native Client模块。 NaCl系统调用的许多模块函数都有一个PP_Instance参数,用于唯一标识模块实例。

我的问题:有没有办法将用户数据与此实例句柄相关联?

C API指定它是一个不透明的句柄。它不提供将用户数据链接到句柄的功能。现在,我必须在模块中使用一堆全局变量来共享函数之间的状态。它感觉不是正确的解决方案。我不确定是否会有多个实例共享进程空间,但我不会在此做任何假设。

我想我可以实现某种查找表来将实例映射到碰巧生活在全局范围内的唯一上下文。但对于基于C的API来说,这似乎也是不必要的。 C ++ API凭借其类来避免这种情况。

1 个答案:

答案 0 :(得分:1)

PP_Instance应该用作查找与插件实例关联的状态/对象的键。当例如在包含帧中存在多个嵌入标签时,可以根据API在模块中实例化多于一个插件实例。目前Pepper的NaCl实现不会这样做 - 而是创建多个进程,每个进程包含一个模块,每个模块实例化一个胡椒插件实例。但是,这是一个可能会发生变化的实现细节(或者可能是bug?),最好是防御性编程并能够处理多个DidCreate事件。

当然,如果您的NaCl模块保证永远不会被其他任何人使用,并且您知道您将不会有两个相同模块的嵌入,那么它可能可以假设单身实例并使用全局状态,但以“正确”的方式做事并不难,为什么不呢?

有关此主题的更多讨论,请参阅native-client-discuss thread