From 38bdc76ab238a7981e2611cc0e33b7b2b791b420 Mon Sep 17 00:00:00 2001 From: John Shaver Date: Fri, 20 Apr 2018 10:29:09 -0700 Subject: [PATCH] No more seg faults! --- main.c | 28 ++++++++++++++++++++++++---- main.js | 24 +++++++----------------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/main.c b/main.c index b0c00da..9d9f640 100644 --- a/main.c +++ b/main.c @@ -1,5 +1,8 @@ -#include +#include #include +#include +#include +#include #include struct PACBData { @@ -25,15 +28,18 @@ napi_value connectToPulse(napi_env env, napi_callback_info info) { napi_value args[1]; struct PACBData *paCBData; napi_status status; - struct NapiCBData *napiCBData = malloc(sizeof(*napiCBData)); - + struct NapiCBData *napiCBData = malloc(sizeof(struct NapiCBData)); + napiCBData->cbRef = malloc(sizeof(napi_ref)); status = napi_get_cb_info(env, info, &argc, args, NULL, (void**)&paCBData); + assert(argc == 1); assert(status == napi_ok); + + printf("finished getting calback info... \n"); napiCBData->env = &env; - status = napi_create_reference(env, args[0], 1, napiCBData->cbRef); + status = napi_create_reference(env, *args, 1, napiCBData->cbRef); assert(status == napi_ok); int ret = 1; @@ -50,6 +56,7 @@ napi_value connectToPulse(napi_env env, napi_callback_info info) { } void connectToPulseCB(pa_context *context, void *userdata) { + printf("Callback called... \n"); napi_status status; napi_value argv[1]; struct NapiCBData *napiCBData = (struct NapiCBData*)userdata; @@ -69,6 +76,7 @@ void connectToPulseCB(pa_context *context, void *userdata) { status = napi_create_error(*(napiCBData->env), NULL, errorString, &argv[0]); assert(status == napi_ok); } else { + return; //eventually need to look into reconnecting on disconnections and handling //connection failures. } @@ -80,6 +88,7 @@ void connectToPulseCB(pa_context *context, void *userdata) { status = napi_get_reference_value(*(napiCBData->env), *(napiCBData->cbRef), &cb); assert(status == napi_ok); + printf("Calling callback from native... \n"); status = napi_call_function(*(napiCBData->env), global, cb, 1, argv, &result); assert(status == napi_ok); } @@ -109,7 +118,18 @@ void connectToPulseCB(pa_context *context, void *userdata) { // return; //} +void handler(int sig) { + void *array[10]; + size_t size; + + size = backtrace(array, 10); + fprintf(stderr, "Error: signal %d:\n", sig); + backtrace_symbols_fd(array, size, STDERR_FILENO); + exit(1); +} + napi_value init(napi_env env, napi_value exports) { + signal(SIGSEGV, handler); pa_mainloop *mainloop = pa_mainloop_new(); pa_mainloop_api *mainloop_api = pa_mainloop_get_api(mainloop); pa_context *context = pa_context_new(mainloop_api, NULL); diff --git a/main.js b/main.js index 0a5c18e..64a535c 100644 --- a/main.js +++ b/main.js @@ -1,18 +1,22 @@ const nativeCode = require('bindings')('miccontrol.node'); +const {promisify} = require("util"); let connectionStarted = false; let connected = false; let queuedRequests = []; + let aAddon = [ "connectToPulse", - "getSources" + //"getSources" ].reduce((obj, fn) => { - obj[fn] = asyncify(nativeCode[fn]); + obj[fn] = promisify(nativeCode[fn]); return obj; }, {}); module.exports = () => { + console.log("Starting connection"); if(!connectionStarted) { - aAddon.connectToPulse().then((e) => { + nativeCode.connectToPulse((e) => { + console.log("CONNECTED!"); if(e) { connectionStarted = false; } else { @@ -64,17 +68,3 @@ module.exports = () => { return miccontrol; } - -function asyncify(fn) { - return async function(...args) { - return new Promise((res, rej) => { - fn(...args, (e, value) => { - if(e) { - return rej(e); - } - return res(value); - });; - }); - }; -} -