<pre style='margin:0'>
ra1nb0w (ra1nb0w) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/6b29387ea1b7b3ae0844d81b06ad5e8363a45133">https://github.com/macports/macports-ports/commit/6b29387ea1b7b3ae0844d81b06ad5e8363a45133</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 6b29387ea1b7b3ae0844d81b06ad5e8363a45133
</span>Author: Davide Gerhard <ra1nb0w@macports.org>
AuthorDate: Sun Aug 16 08:11:56 2020 +0200

<span style='display:block; white-space:pre;color:#404040;'>    wdsp: fix unused semaphores on macOS
</span>---
 science/wdsp/Portfile                          |   5 +-
 science/wdsp/files/fix-unused-semaphores.patch | 104 +++++++++++++++++++++++++
 2 files changed, 107 insertions(+), 2 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/science/wdsp/Portfile b/science/wdsp/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 3b117e1d8b9..4c8cee85468 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/science/wdsp/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/science/wdsp/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -18,11 +18,12 @@ version             20200720-[string range ${github.version} 0 7]
</span> checksums           rmd160  a0a6ee1dbdb0d3e21e6c4bdb7a1b1e79a4236b41 \
                     sha256  35a61386b4883731f3d7f0a046e5ae73d9083f75227c4cbb60fe9df0734b0af3 \
                     size    1551664
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            1
</span> 
 ## remove when upstream
 patchfiles-append \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    makefile_mac.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    makefile_mac.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    fix-unused-semaphores.patch
</span> 
 depends_lib-append \
     port:fftw-3
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/science/wdsp/files/fix-unused-semaphores.patch b/science/wdsp/files/fix-unused-semaphores.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..5bb4c9e03f4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/science/wdsp/files/fix-unused-semaphores.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,104 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From bca808b6e43c34287219442b3f401885657a4f95 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: c vw <dl1ycf@darc.de>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 14 Aug 2020 11:04:14 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 2/3] report errors encountered during sem_init, and close
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ no-longer-used semaphores on MacOS.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ linux_port.c | 19 +++++++++++++++++++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 19 insertions(+)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/linux_port.c b/linux_port.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 6459b4c..e08bc02 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- linux_port.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ linux_port.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -108,6 +108,9 @@ sem_t *LinuxCreateSemaphore(int attributes,int initial_count,int maximum_count,c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         sem=malloc(sizeof(sem_t));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   result=sem_init(sem, 0, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if (result < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    perror("WDSP:CreateSemaphore");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return sem;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -182,6 +185,22 @@ void SetThreadPriority(HANDLE thread, int priority)  {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int CloseHandle(HANDLE hObject) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Note a new Semaphore is allocated at each RX/TX transition, so after
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// about 200 RX/TX transitions, MacOS runs out of file descriptors (no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// new semaphores can be allocated, and rigctl cannot make any new
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// connections).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if (sem_close(hObject) < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  perror("CloseHandle");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// possibly it would also be a good idea to do sem_destroy() here
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// this is actually a void function (return value never used).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From c37b82b17ce5e0ea093771c57ae26b6dabb90f01 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: c vw <dl1ycf@darc.de>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Fri, 14 Aug 2020 11:44:16 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 3/3] Release semaphore also in LINUX case
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ linux_port.c | 31 ++++++++++++++++++++++++-------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 24 insertions(+), 7 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/linux_port.c b/linux_port.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e08bc02..14a2864 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- linux_port.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ linux_port.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -185,18 +185,35 @@ void SetThreadPriority(HANDLE thread, int priority)  {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int CloseHandle(HANDLE hObject) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// This routine is *ONLY* called to release semaphores
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// Note a new Semaphore is allocated at each RX/TX transition, so after
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// about 200 RX/TX transitions, MacOS runs out of file descriptors (no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// new semaphores can be allocated, and rigctl cannot make any new
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// connections).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// A semaphore is closed and re-allocated on each RX->TX transition.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// After about 200 RX/TX transitions, MacOS runs out of file descriptors
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// since MacOS only has named semaphores. As a consequence,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// no new semaphores can be allocated, and other parts of the program cannot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// open new files ore make new connections.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Therefore we should close the semaphore.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ //
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-if (sem_close(hObject) < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  perror("CloseHandle");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if (sem_close((sem_t *)hObject) < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  perror("WDSP:CloseHandle:SemCLose");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-// possibly it would also be a good idea to do sem_destroy() here
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Although the number of semaphores seems "unlimited" on RapianOS,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// this is nevertheless a memory leak (a sem_t is allocated before
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// sem_init is called, see above).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// So destroy the semaphore and (if this was successful) release the memory.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if (sem_destroy((sem_t *)hObject) < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  perror("WDSP:CloseHandle:SemDestroy");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++} else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // if sem_destroy failed, do not release storage
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  free(hObject);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // this is actually a void function (return value never used).
</span></pre><pre style='margin:0'>

</pre>