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

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/28c87dc00e414ead84027885463a60e860258db2">https://github.com/macports/macports-ports/commit/28c87dc00e414ead84027885463a60e860258db2</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 28c87dc00e4 iwnet: update to 2024.01.27
</span>28c87dc00e4 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 28c87dc00e414ead84027885463a60e860258db2
</span>Author: barracuda156 <vital.had@gmail.com>
AuthorDate: Sun Feb 4 15:18:11 2024 +0800

<span style='display:block; white-space:pre;color:#404040;'>    iwnet: update to 2024.01.27
</span>---
 net/iwnet/Portfile                                 |  23 +++--
 ...poller_poll_in_thread-now-waits-poller-th.patch | 101 +++++++++++++++++++++
 2 files changed, 117 insertions(+), 7 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/iwnet/Portfile b/net/iwnet/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 88efaa519e0..c08d345cd2c 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/net/iwnet/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/net/iwnet/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -8,21 +8,30 @@ PortGroup           legacysupport 1.1
</span> # strndup, clock_gettime
 legacysupport.newest_darwin_requires_legacy 15
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-github.setup        Softmotions iwnet 45e534d9104bb09617aaad37d5944fd79b45c689
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-version             2023.10.26
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup        Softmotions iwnet 81b6ad3d69ff3654bdad04478666edbf4d3f5d3f
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version             2024.01.27
</span> revision            0
 categories          net devel
 license             MIT
 maintainers         {@barracuda156 gmail.com:vital.had} openmaintainer
<span style='display:block; white-space:pre;background:#ffe0e0;'>-description         Pure C asynchronous HTTP framework providing websockets client/server, SSL, reverse proxy and routing
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-long_description    {*}${description}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description         Pure C asynchronous HTTP framework
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description    {*}${description} providing websockets client/server, SSL, \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    reverse proxy and routing.
</span> # Due to: https://github.com/Softmotions/iwnet/issues/5
 platforms           {darwin > 9}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums           rmd160  89f55b0f4f7e75d790c15ee000c0ae5147146333 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256  f1f514a4f6157fdd86b6aa55f2a46e78031bccda33293cf22c66aefae3d87eb9 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    size    823431
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           rmd160  c4c0ce4688fad27a03135c597eb42f5a9d7068d7 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  418bf8c2de707559fd21ddb6474c989377de9793eed3bb993bd66b429ad0c94d \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    824035
</span> github.tarball_from archive
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Temporary fix reverting a breaking commit:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/Softmotions/iwnet/commit/414ce1adc6484c6518ac8587107ff2905328f8de
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# FIXME: add an implementation for pthread_barrier. See also:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/ademakov/DarwinPthreadBarrier
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/envy/knx2influx/issues/20
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/pmwkaa/ioarena/issues/10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append   0001-Revert-iwn_poller_poll_in_thread-now-waits-poller-th.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> depends_lib-append  port:iowow
 
 compiler.c_standard 2011
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/iwnet/files/0001-Revert-iwn_poller_poll_in_thread-now-waits-poller-th.patch b/net/iwnet/files/0001-Revert-iwn_poller_poll_in_thread-now-waits-poller-th.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..3eb3da8b091
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/net/iwnet/files/0001-Revert-iwn_poller_poll_in_thread-now-waits-poller-th.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,101 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From ca10b1e678e651f62afe67c6abd9c1d9f44daf9f Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: barracuda156 <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Sun, 4 Feb 2024 15:06:38 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Revert "* iwn_poller_poll_in_thread() now waits poller thread
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ starts"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+This reverts commit 414ce1adc6484c6518ac8587107ff2905328f8de.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/poller/iwn_poller.c | 31 +++++++++----------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 9 insertions(+), 22 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git src/poller/iwn_poller.c src/poller/iwn_poller.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a8f4627..5cf268c 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/poller/iwn_poller.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/poller/iwn_poller.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -56,10 +56,8 @@ struct iwn_poller {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   IWHMAP *slots;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   char   *thread_name;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  pthread_mutex_t    mtx;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  pthread_barrier_t  _barrier_poll; ///< Poll-in-thread barrier
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  pthread_barrier_t *barrier_poll;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  uint32_t flags;                 ///< Poller mode flags. See iwn_poller_flags_set()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  pthread_mutex_t mtx;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  uint32_t flags; ///< Poller mode flags. See iwn_poller_flags_set()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   volatile bool stop;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   volatile bool housekeeping;          ///< CAS barrier for timeout cleaner
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -129,7 +127,7 @@ IW_INLINE void _rw_fd_unsubscribe(struct poller_slot *s) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (!(s->flags & SLOT_UNSUBSCRIBED)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     s->flags |= SLOT_UNSUBSCRIBED;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     struct kevent ev[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      { s->fd, EVFILT_READ, EV_DELETE },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { s->fd, EVFILT_READ,  EV_DELETE },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       { s->fd, EVFILT_WRITE, EV_DELETE },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     kevent(s->poller->fd, ev, sizeof(ev) / sizeof(ev[0]), 0, 0, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -376,11 +374,11 @@ static void _timer_ready_impl(struct iwn_poller *p) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #elif defined(IWN_KQUEUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     struct kevent ev = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      .ident = p->fd,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      .ident  = p->fd,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       .filter = EVFILT_TIMER,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      .flags = EV_ADD | EV_ENABLE | EV_CLEAR | EV_ONESHOT,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      .flags  = EV_ADD | EV_ENABLE | EV_CLEAR | EV_ONESHOT,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       .fflags = NOTE_SECONDS,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      .data = timeout_next - ctime,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      .data   = timeout_next - ctime,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (kevent(p->fd, &ev, 1, 0, 0, 0) == -1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       iwrc rc = iwrc_set_errno(IW_ERROR_ERRNO, errno);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -520,7 +518,7 @@ static iwrc _poller_timeout_add(struct poller_slot *s) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (timerfd_settime(s->fd, 0, &(struct itimerspec) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     .it_value = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      .tv_sec = s->timeout / 1000,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      .tv_sec  = s->timeout / 1000,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       .tv_nsec = (int64_t) (s->timeout % 1000) * 1000000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }, 0) < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -683,9 +681,9 @@ void iwn_poller_poke(struct iwn_poller *p) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     struct kevent ev[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       { p->fd, EVFILT_USER, EV_ADD | EV_ONESHOT },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(NOTE_TRIGGER)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      { p->fd, EVFILT_USER, 0, NOTE_TRIGGER }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { p->fd, EVFILT_USER, 0, NOTE_TRIGGER     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #elif defined(EV_TRIGGER)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      { p->fd, EVFILT_USER, EV_TRIGGER, 0 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { p->fd, EVFILT_USER, EV_TRIGGER, 0       }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #error "Either NOTE_TRIGGER or EV_TRIGGER is required."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -958,16 +956,9 @@ iwrc iwn_poller_poll_in_thread(struct iwn_poller *p, const char *thr_name, pthre
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (thr_name) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     p->thread_name = strdup(thr_name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  RCN(finish, pthread_barrier_init(&p->_barrier_poll, 0, 2));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  p->barrier_poll = &p->_barrier_poll;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   RCN(finish, pthread_create(out_thr, 0, _poll_worker, p));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  pthread_barrier_wait(p->barrier_poll);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ finish:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (p->barrier_poll) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pthread_barrier_destroy(p->barrier_poll);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    p->barrier_poll = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return rc;
</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;'>+@@ -998,10 +989,6 @@ void iwn_poller_poll(struct iwn_poller *p) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     p->stop = false;
</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 (p->barrier_poll) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    pthread_barrier_wait(p->barrier_poll);
</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;'>+   while (!p->stop) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(IWN_KQUEUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     int nfds = kevent(p->fd, 0, 0, event, max_events, 0);
</span></pre><pre style='margin:0'>

</pre>