]> git.gag.com Git - debian/gnuradio/commitdiff
free schmid_guard on error paths where it has been allocated and not
authorgdt <gdt@221aa14e-8319-0410-a670-987f0aec2ac5>
Wed, 31 Jan 2007 18:10:53 +0000 (18:10 +0000)
committergdt <gdt@221aa14e-8319-0410-a670-987f0aec2ac5>
Wed, 31 Jan 2007 18:10:53 +0000 (18:10 +0000)
freed.  Fixes shm leak on NetBSD which hits the error case for unknown
reasons.

git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@4346 221aa14e-8319-0410-a670-987f0aec2ac5

gnuradio-core/src/lib/runtime/gr_vmcircbuf_sysv_shm.cc

index fe0322f7348c70641acf288052b1b01055c78f9b..ccb169b95b15281d9881b3f7e5b2361fcd668d1f 100644 (file)
@@ -68,11 +68,13 @@ gr_vmcircbuf_sysv_shm::gr_vmcircbuf_sysv_shm (int size)
 
   if ((shmid2 = shmget (IPC_PRIVATE, 2 * size + 2 * pagesize, IPC_CREAT | 0700)) == -1){
     perror ("gr_vmcircbuf_sysv_shm: shmget (1)");
+    shmctl (shmid_guard, IPC_RMID, 0);
     throw std::runtime_error ("gr_vmcircbuf_sysv_shm");
   }
 
   if ((shmid1 = shmget (IPC_PRIVATE, size, IPC_CREAT | 0700)) == -1){
     perror ("gr_vmcircbuf_sysv_shm: shmget (2)");
+    shmctl (shmid_guard, IPC_RMID, 0);
     shmctl (shmid2, IPC_RMID, 0);
     throw std::runtime_error ("gr_vmcircbuf_sysv_shm");
   }