pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/www/firefox Add patch from PR 51966.



details:   https://anonhg.NetBSD.org/pkgsrc/rev/46ced937901f
branches:  trunk
changeset: 364560:46ced937901f
user:      martin <martin%pkgsrc.org@localhost>
date:      Thu Jun 29 08:07:59 2017 +0000

description:
Add patch from PR 51966.

diffstat:

 www/firefox/Makefile                                                |    3 +-
 www/firefox/distinfo                                                |    4 +-
 www/firefox/patches/patch-ipc_glue_CrossProcessSemaphore.h          |   21 +
 www/firefox/patches/patch-ipc_glue_CrossProcessSemaphore__posix.cpp |  191 ++++++++++
 4 files changed, 217 insertions(+), 2 deletions(-)

diffs (255 lines):

diff -r 2546a275f085 -r 46ced937901f www/firefox/Makefile
--- a/www/firefox/Makefile      Thu Jun 29 06:33:29 2017 +0000
+++ b/www/firefox/Makefile      Thu Jun 29 08:07:59 2017 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.297 2017/06/14 11:28:44 ryoon Exp $
+# $NetBSD: Makefile,v 1.298 2017/06/29 08:07:59 martin Exp $
 
 FIREFOX_VER=           ${MOZ_BRANCH}${MOZ_BRANCH_MINOR}
 MOZ_BRANCH=            54.0
@@ -6,6 +6,7 @@
 
 DISTNAME=      firefox-${FIREFOX_VER}.source
 PKGNAME=       firefox-${MOZ_BRANCH}${MOZ_BRANCH_MINOR:S/b/beta/:S/esr//}
+PKGREVISION=   1
 CATEGORIES=    www
 MASTER_SITES+= ${MASTER_SITE_MOZILLA:=firefox/releases/${FIREFOX_VER}/source/}
 MASTER_SITES+= ${MASTER_SITE_MOZILLA_ALL:=firefox/releases/${FIREFOX_VER}/source/}
diff -r 2546a275f085 -r 46ced937901f www/firefox/distinfo
--- a/www/firefox/distinfo      Thu Jun 29 06:33:29 2017 +0000
+++ b/www/firefox/distinfo      Thu Jun 29 08:07:59 2017 +0000
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.282 2017/06/14 11:28:44 ryoon Exp $
+$NetBSD: distinfo,v 1.283 2017/06/29 08:07:59 martin Exp $
 
 SHA1 (firefox-54.0.source.tar.xz) = 44e40c77f58e3b203dc60f51c5a02993f6c38ee5
 RMD160 (firefox-54.0.source.tar.xz) = 310f21498bc69939049d3ca881674a40fba8da21
@@ -49,6 +49,8 @@
 SHA1 (patch-ipc_chromium_src_base_time__posix.cc) = ba4e0872490f870e7d2f468e1fe87c33cf9a3500
 SHA1 (patch-ipc_chromium_src_build_build__config.h) = 9e4f15226c494f5015dbea3a0df6af851449ae15
 SHA1 (patch-ipc_chromium_src_chrome_common_transport__dib.h) = 33ea11a8c23f2fefcb318342ac9e94d3885cb3b1
+SHA1 (patch-ipc_glue_CrossProcessSemaphore.h) = 778a569887d8ad082abc2fa2fe89a0a943e84d64
+SHA1 (patch-ipc_glue_CrossProcessSemaphore__posix.cpp) = fc07bb12aa304c184e523072ad496a3863cb7f07
 SHA1 (patch-ipc_glue_GeckoChildProcessHost.cpp) = 37fca99dc5359a7c1403b7674080bd27b0a5eafe
 SHA1 (patch-js_src_jit_arm_Architecture-arm.cpp) = f0b554c169643b8447b4f29168d61ea257b18782
 SHA1 (patch-js_src_jit_none_AtomicOperations-sparc.h) = b44992a869d6d08809a9edc28f1ad6f40632d392
diff -r 2546a275f085 -r 46ced937901f www/firefox/patches/patch-ipc_glue_CrossProcessSemaphore.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/www/firefox/patches/patch-ipc_glue_CrossProcessSemaphore.h        Thu Jun 29 08:07:59 2017 +0000
@@ -0,0 +1,21 @@
+$NetBSD: patch-ipc_glue_CrossProcessSemaphore.h,v 1.1 2017/06/29 08:07:59 martin Exp $
+
+- avoid use of sem_t on NetBSD
+  http://mail-index.netbsd.org/pkgsrc-bugs/2017/06/23/msg062225.html
+
+--- ipc/glue/CrossProcessSemaphore.h.orig      2017-06-05 20:45:20.000000000 +0000
++++ ipc/glue/CrossProcessSemaphore.h
+@@ -91,7 +91,13 @@ private:
+   HANDLE mSemaphore;
+ #elif !defined(OS_MACOSX)
+   RefPtr<mozilla::ipc::SharedMemoryBasic> mSharedBuffer;
++#if defined(__NetBSD__)
++  pthread_mutex_t* mMutex;
++  pthread_cond_t* mNotZero;
++  uint32_t* mValue;
++#else
+   sem_t* mSemaphore;
++#endif
+   mozilla::Atomic<int32_t>* mRefCount;
+ #endif
+ };
diff -r 2546a275f085 -r 46ced937901f www/firefox/patches/patch-ipc_glue_CrossProcessSemaphore__posix.cpp
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/www/firefox/patches/patch-ipc_glue_CrossProcessSemaphore__posix.cpp       Thu Jun 29 08:07:59 2017 +0000
@@ -0,0 +1,191 @@
+$NetBSD: patch-ipc_glue_CrossProcessSemaphore__posix.cpp,v 1.1 2017/06/29 08:07:59 martin Exp $
+
+- avoid use of sem_t on NetBSD
+  http://mail-index.netbsd.org/pkgsrc-bugs/2017/06/23/msg062225.html
+
+--- ipc/glue/CrossProcessSemaphore_posix.cpp.orig      2017-06-25 05:29:49.000000000 +0000
++++ ipc/glue/CrossProcessSemaphore_posix.cpp
+@@ -9,6 +9,11 @@
+ #include "nsDebug.h"
+ #include "nsISupportsImpl.h"
+ #include <errno.h>
++#if defined(__NetBSD__)
++#include <iostream>
++#include <unistd.h>
++#include <limits>
++#endif
+ 
+ static const uint64_t kNsPerMs = 1000000;
+ static const uint64_t kNsPerSec = 1000000000;
+@@ -17,7 +22,13 @@ namespace {
+ 
+ 
+ struct SemaphoreData {
++#if defined(__NetBSD__)
++  pthread_mutex_t mMutex;
++  pthread_cond_t mNotZero;
++  uint32_t mValue;
++#else
+   sem_t mSemaphore;
++#endif
+   mozilla::Atomic<int32_t> mRefCount;
+   uint32_t mInitialValue;
+ };
+@@ -44,13 +55,27 @@ CrossProcessSemaphore::Create(const char
+     return nullptr;
+   }
+ 
++#if defined(__NetBSD__)
++  data->mValue = aInitialValue;
++  if (pthread_mutex_init(&data->mMutex, NULL) ||
++      pthread_cond_init(&data->mNotZero, NULL) ) {
++    return nullptr;
++  }
++#else
+   if (sem_init(&data->mSemaphore, 1, aInitialValue)) {
+     return nullptr;
+   }
++#endif
+ 
+   CrossProcessSemaphore* sem = new CrossProcessSemaphore;
+   sem->mSharedBuffer = sharedBuffer;
++#if defined(__NetBSD__)
++  sem->mMutex = &data->mMutex;  
++  sem->mNotZero = &data->mNotZero;  
++  sem->mValue = &data->mValue;
++#else
+   sem->mSemaphore = &data->mSemaphore;
++#endif
+   sem->mRefCount = &data->mRefCount;
+   *sem->mRefCount = 1;
+ 
+@@ -84,24 +109,44 @@ CrossProcessSemaphore::Create(CrossProce
+ 
+   int32_t oldCount = data->mRefCount++;
+   if (oldCount == 0) {
++#if defined(__NetBSD__)
++    if (pthread_mutex_init(&data->mMutex, NULL) ||
++        pthread_cond_init(&data->mNotZero, NULL) ) {
++      data->mRefCount--;
++      return nullptr;
++    }
++#else
+     // The other side has already let go of their CrossProcessSemaphore, so now
+     // mSemaphore is garbage. We need to re-initialize it.
+     if (sem_init(&data->mSemaphore, 1, data->mInitialValue)) {
+       data->mRefCount--;
+       return nullptr;
+     }
++#endif
+   }
+ 
+   CrossProcessSemaphore* sem = new CrossProcessSemaphore;
+   sem->mSharedBuffer = sharedBuffer;
++#if defined(__NetBSD__)
++  sem->mMutex = &data->mMutex;  
++  sem->mNotZero = &data->mNotZero;  
++  sem->mValue = &data->mValue;
++#else
+   sem->mSemaphore = &data->mSemaphore;
++#endif
+   sem->mRefCount = &data->mRefCount;
+   return sem;
+ }
+ 
+ 
+ CrossProcessSemaphore::CrossProcessSemaphore()
++#if defined(__NetBSD__)
++  : mMutex (nullptr)
++  , mNotZero (nullptr)
++  , mValue (nullptr)
++#else
+   : mSemaphore(nullptr)
++#endif
+   , mRefCount(nullptr)
+ {
+   MOZ_COUNT_CTOR(CrossProcessSemaphore);
+@@ -113,17 +158,58 @@ CrossProcessSemaphore::~CrossProcessSema
+ 
+   if (oldCount == 0) {
+     // Nothing can be done if the destroy fails so ignore return code.
++#if defined(__NetBSD__)
++    (void)pthread_cond_destroy(mNotZero);
++    (void)pthread_mutex_destroy(mMutex);
++#else
+     Unused << sem_destroy(mSemaphore);
++#endif
+   }
+ 
+   MOZ_COUNT_DTOR(CrossProcessSemaphore);
+ }
+ 
++#if defined(__NetBSD__)
++static struct timespec
++makeAbsTime(const Maybe<TimeDuration>& aWaitTime) {
++  struct timespec ts;
++  if (aWaitTime.isSome()) {
++    clock_gettime(CLOCK_REALTIME, &ts);
++    ts.tv_nsec += (kNsPerMs * aWaitTime->ToMilliseconds());
++    ts.tv_sec += ts.tv_nsec / kNsPerSec;
++    ts.tv_nsec %= kNsPerSec;
++  }
++  else {
++    ts.tv_sec = std::numeric_limits<time_t>::max();
++    ts.tv_nsec = 0;
++  }
++  return ts;
++}
++#endif
++
+ bool
+ CrossProcessSemaphore::Wait(const Maybe<TimeDuration>& aWaitTime)
+ {
+   MOZ_ASSERT(*mRefCount > 0, "Attempting to wait on a semaphore with zero ref count");
+   int ret;
++#if defined(__NetBSD__)
++  struct timespec ts = makeAbsTime(aWaitTime);
++
++  ret = pthread_mutex_lock(mMutex);
++
++  if (ret == 0) {
++    while (ret == 0 && mValue == 0) {
++      ret = pthread_cond_timedwait(mNotZero, mMutex, &ts);
++      while (ret == -1 && errno == EINTR) {
++        ret = pthread_cond_timedwait(mNotZero, mMutex, &ts);
++      }
++    }
++    if (ret == 0) {
++      --(*mValue);
++    }
++    pthread_mutex_unlock(mMutex);
++  }
++#else
+   if (aWaitTime.isSome()) {
+     struct timespec ts;
+     if (clock_gettime(CLOCK_REALTIME, &ts) == -1) {
+@@ -142,6 +228,7 @@ CrossProcessSemaphore::Wait(const Maybe<
+       continue;
+     }
+   }
++#endif
+   return ret == 0;
+ }
+ 
+@@ -149,7 +236,17 @@ void
+ CrossProcessSemaphore::Signal()
+ {
+   MOZ_ASSERT(*mRefCount > 0, "Attempting to signal a semaphore with zero ref count");
++#if defined(__NetBSD__)
++  int ret;
++  ret = pthread_mutex_lock(mMutex);
++  if (ret == 0) {
++    ++(*mValue);
++    pthread_cond_signal(mNotZero);
++    pthread_mutex_unlock(mMutex);
++  }
++#else
+   sem_post(mSemaphore);
++#endif
+ }
+ 
+ CrossProcessSemaphoreHandle



Home | Main Index | Thread Index | Old Index