On Tue, Aug 18, 2020 at 4:01 AM David Landon <david.p.lan...@gmail.com> wrote: > > Hi all, > > I've begun working on my first project using Libuv and I've reached the first > hangup I couldn't resolve by either trying a million things or digging into > the source code. > > MY GOAL: > My project runs in the Max/MSP coding environment (https://cycling74.com/). > Their SDK API documentation can be found here. Basically, I'm copying the > audio signal (chunked into signal vectors by Max) from a callback that the > audio card uses into a uv_buf_t and then using uv_udp_send to send that to a > receiving program that copies the buffer in reverse to be used as playback on > their separate machine/soundcard . So I'm trying to send audio from one user > running Max/MSP to another, also running Max/MSP over the internet. > > MY QUESTION: > I've been successful sending small, single, test messages between the > programs, and also successful copying the audio signal, which is an array of > doubles representing the sample data, and using that for playback on the > individual programs. But when I try to send the copied sample data via > udp_send from one to the other, the programs crash. If I run _just_ the > sending program, it is fine and reports no errors. When I instantiate the > receiving program by itself, it also seems fine. What this tells me is that > it has to do with memory allocation in either the on_alloc or on_recv > callbacks that udp_recv_start uses. I've allocated memory for the size of > the signal vector in on_alloc (sys_getblksize() being part of the Max API > which reports the signal vector size: > > buf->base = (char*)malloc(sizeof(double) * sys_getblksize()); > buf->len = sys_getblksize() * sizeof(double); > > and free the buffer's base : free(buf->base); in the on_recv callback as per > the documentation, but something about that doesn't seem right to me. How is > the buffer getting passed between the two and does the freeing of memory in > the recv_cb free the memory in the alloc_cb, or am I just VERY rapidly > allocating memory without freeing it? > > I've got all of the code on GitHub here, for anyone that wants to take a > look: https://github.com/dlandon86?tab=repositories. The send side of things > is dl.netsend~ and receive dl.netreceive~. Its my first coding project... > ever, so feel free to pick it apart! And I'm happy to give more info if it's > required. I just don't want to make this post any longer than it needs to be. > > Thank you for your help! > > Best, > David
I only had a quick look but it seems like you're using the same event loop on multiple threads. Libuv functions in general are not thread-safe, unless explicitly marked otherwise in the documentation. -- You received this message because you are subscribed to the Google Groups "libuv" group. To unsubscribe from this group and stop receiving emails from it, send an email to libuv+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/libuv/CAHQurc-ECQo7pBu7tfdA-H_YktjmwBHcB-DnVjY7hpPjFFYyeg%40mail.gmail.com.