sctp: Fix crash on free() when using the MSVC binaries
authorNirbheek Chauhan <nirbheek@centricular.com>
Tue, 20 Aug 2019 08:51:17 +0000 (14:21 +0530)
committerTim-Philipp Müller <tim@centricular.com>
Tue, 20 Aug 2019 18:21:26 +0000 (19:21 +0100)
On Windows, if libusrsctp and gstreamer are built with different
C runtimes (CRT), we cannot free memory allocated inside libusrsctp
with the `free()` function from gstreamer's CRT.

`usrsctp_freedumpbuffer()` simply calls `free()`, but because of the
way DLLs work on Windows, it will always call the free function from
the correct CRT.

ext/sctp/sctpassociation.c

index 23be55f..430e9cc 100644 (file)
@@ -686,7 +686,11 @@ receive_cb (struct socket *sock, union sctp_sockstore addr, void *data,
     if (flags & MSG_NOTIFICATION) {
       handle_notification (self, (const union sctp_notification *) data,
           datalen);
-      free (data);
+      /* We use this instead of a bare `free()` so that we use the `free` from
+       * the C runtime that usrsctp was built with. This makes a difference on
+       * Windows where libusrstcp and GStreamer can be linked to two different
+       * CRTs. */
+      usrsctp_freedumpbuffer (data);
     } else {
       handle_message (self, data, datalen, rcv_info.rcv_sid,
           ntohl (rcv_info.rcv_ppid));