跨进程调用回调会导致分段错误

时间:2015-01-29 11:55:29

标签: c linux process callback

两个独立的程序使用一个公共库,允许它们:

  • 为给定事件注册回调(事件是我创建的枚举值)
  • 发出一个事件信号,从而调用与此事件相关的所有回调。

我的测试用例是:

    程序B中的
  • ,将本地函数my_callback()注册到事件1,
  • 程序A中的
  • ,信号事件1。

我已经确认:

  • 程序B将其回调注册到正确的事件,并将看似合理的指针连接到回调(0x400d80
  • 程序A在信令事件1上找到B的回调,并使用正确的地址(0x400d80)。

尝试从A实际运行B的回调时发生的事情是分段错误。

是不是可以从A调用B的回调,即使这些是单独的进程?感觉A正在抱怨试图在别人的沙箱中运行某些东西。

如何让程序A调用B中的函数?


以下是调用与给定事件关联的所有回调的代码(在lib的signal()中):

for (int i = 0; i < event_list[event].nb_callbacks; ++i) {
    printf("callback %d address: %p\n", i, event_list[event].callbacks[i]);
    if (event_list[event].callbacks[i] != NULL) {
        event_list[event].callbacks[i]();
    } else {
        fprintf(stderr, "Warning: registered callback is NULL\n");
    }
}

以下是我如何注册回调地址(程序B):

static bool event_occured = false;
void on_signal_input(void);

int main()
{
    // ...
    if (event_register(evd, EVENT_TEST_1, on_signal_input) < 0) {
        fprintf(stderr, "Error: event_register\n");
        return -1;
    }
    // ...
}

void on_signal_input(void)
{
    printf("event occured\n");
    event_occured = true;
}

0 个答案:

没有答案