C 星号

C 星号,c,asterisk,C,Asterisk,我在apps/文件夹中添加了一个自定义模块,用于在ast\u channel\u topic\u all主题中注册。不幸的是,每次加载模块时都会出现段故障 #include "asterisk.h" #include "asterisk/module.h" #include "asterisk/json.h" #include "asterisk/stasis.h" #include "asterisk/stasis_channels.h" #include "asterisk/manager.

我在
apps/
文件夹中添加了一个自定义模块,用于在
ast\u channel\u topic\u all
主题中注册。不幸的是,每次加载模块时都会出现段故障

#include "asterisk.h"
#include "asterisk/module.h"
#include "asterisk/json.h"
#include "asterisk/stasis.h"
#include "asterisk/stasis_channels.h"
#include "asterisk/manager.h"

ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#define AST_MODULE "stasis_test"

static struct stasis_subscription *queue_stasis_message_sub;

static void queue_subscribe_callback(void *data, struct stasis_subscription    *sub, struct stasis_topic *topic, struct stasis_message *message){

    struct ast_channel_blob *payload = stasis_message_data(message);
    // ...
}

static int unload_module(void) {

    stasis_unsubscribe_and_join(queue_stasis_message_sub);

    return 0;
}

static int load_module(void) {

    queue_stasis_message_sub = stasis_subscribe(ast_channel_topic_all(),     queue_subscribe_callback, NULL);

    if ( !queue_stasis_message_sub ) {
        unload_module();
        return AST_MODULE_LOAD_DECLINE;
    }

    return AST_MODULE_LOAD_SUCCESS;
}

AST_MODULE_INFO(
    ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, AST_MODULE,
    .load = load_module,
    .unload = unload_module
);
是什么导致了这个错误?期待您的回复。
顺便说一句,我使用的星号版本是13.10。

这个问题是调试问题

  • 用调试符号编译星号
  • 在asterisk.conf中启用核心转储
  • 从星号开始
  • 使用GDB检查堆芯转储

  • 闻起来好像你不能将
    NULL
    作为
    stasis\u subscribe
    函数的第三个参数传递这是星号在源代码中正式做的,应该是正确的。