[x265] [PATCH] fix the compiling errors on mac

Mahesh Pittala mahesh at multicorewareinc.com
Thu Oct 14 04:28:08 UTC 2021


Pushed to master

On Thu, Oct 14, 2021 at 9:44 AM Mahesh Pittala <mahesh at multicorewareinc.com>
wrote:

> From e0ef56408ac917ad6570f5f204accf8858326232 Mon Sep 17 00:00:00 2001
> From: lwWang <liwei at multicorewareinc.com>
> Date: Wed, 13 Oct 2021 16:54:54 +0800
> Subject: [PATCH] fix the compiling errors on mac
>
> ---
>  source/common/ringmem.cpp |   4 +-
>  source/common/threading.h | 183 +++++++++++++++++++++++++++++++++++++-
>  2 files changed, 184 insertions(+), 3 deletions(-)
>
> diff --git a/source/common/ringmem.cpp b/source/common/ringmem.cpp
> index a4f191c90..cfd44e83d 100644
> --- a/source/common/ringmem.cpp
> +++ b/source/common/ringmem.cpp
> @@ -227,7 +227,7 @@ namespace X265_NS {
>                  }
>
>                  ///< shared memory name
> -                snprintf(nameBuf, sizeof(nameBuf - 1), "%s%s",
> X265_SEMAPHORE_RINGMEM_WRITER_NAME, name);
> +                snprintf(nameBuf, sizeof(nameBuf) - 1, "%s%s",
> X265_SEMAPHORE_RINGMEM_WRITER_NAME, name);
>                  if (!m_writeSem->create(nameBuf, m_itemCnt, m_itemCnt))
>                  {
>                      release();
> @@ -242,7 +242,7 @@ namespace X265_NS {
>                  }
>
>                  ///< shared memory name
> -                snprintf(nameBuf, sizeof(nameBuf - 1), "%s%s",
> X265_SEMAPHORE_RINGMEM_READER_NAME, name);
> +                snprintf(nameBuf, sizeof(nameBuf) - 1, "%s%s",
> X265_SEMAPHORE_RINGMEM_READER_NAME, name);
>                  if (!m_readSem->create(nameBuf, 0, m_itemCnt))
>                  {
>                      release();
> diff --git a/source/common/threading.h b/source/common/threading.h
> index dcf6081e3..8a5c39cf0 100644
> --- a/source/common/threading.h
> +++ b/source/common/threading.h
> @@ -508,7 +508,9 @@ class NamedSemaphore
>  public:
>      NamedSemaphore()
>          : m_sem(NULL)
> +#ifndef __APPLE__
>          , m_name(NULL)
> +#endif //__APPLE__
>      {
>      }
>
> @@ -525,6 +527,59 @@ public:
>              return false;
>          }
>
> +#ifdef __APPLE__
> +        do
> +        {
> +            int32_t pshared = name != NULL ? PTHREAD_PROCESS_SHARED :
> PTHREAD_PROCESS_PRIVATE;
> +
> +            m_sem = (mac_sem_t *)malloc(sizeof(mac_sem_t));
> +            if (!m_sem)
> +            {
> +                break;
> +            }
> +
> +            if (pthread_mutexattr_init(&m_sem->mutexAttr))
> +            {
> +                break;
> +            }
> +
> +            if (pthread_mutexattr_setpshared(&m_sem->mutexAttr, pshared))
> +            {
> +                break;
> +            }
> +
> +            if (pthread_condattr_init(&m_sem->condAttr))
> +            {
> +                break;
> +            }
> +
> +            if (pthread_condattr_setpshared(&m_sem->condAttr, pshared))
> +            {
> +                break;
> +            }
> +
> +            if (pthread_mutex_init(&m_sem->mutex, &m_sem->mutexAttr))
> +            {
> +                break;
> +            }
> +
> +            if (pthread_cond_init(&m_sem->cond, &m_sem->condAttr))
> +            {
> +                break;
> +            }
> +
> +            m_sem->curCnt = initcnt;
> +            m_sem->maxCnt = maxcnt;
> +
> +            ret = true;
> +        } while (0);
> +
> +        if (!ret)
> +        {
> +            release();
> +        }
> +
> +#else  //__APPLE__
>          m_sem = sem_open(name, O_CREAT | O_EXCL, 0666, initcnt);
>          if (m_sem != SEM_FAILED)
>          {
> @@ -543,12 +598,44 @@ public:
>                  }
>              }
>          }
> +#endif //__APPLE__
>
>          return ret;
>      }
>
>      bool give(const int32_t cnt)
>      {
> +        if (!m_sem)
> +        {
> +            return false;
> +        }
> +
> +#ifdef __APPLE__
> +        if (pthread_mutex_lock(&m_sem->mutex))
> +        {
> +            return false;
> +        }
> +
> +        int oldCnt = m_sem->curCnt;
> +        m_sem->curCnt += cnt;
> +        if (m_sem->curCnt > m_sem->maxCnt)
> +        {
> +            m_sem->curCnt = m_sem->maxCnt;
> +        }
> +
> +        bool ret = true;
> +        if (!oldCnt)
> +        {
> +            ret = 0 == pthread_cond_broadcast(&m_sem->cond);
> +        }
> +
> +        if (pthread_mutex_unlock(&m_sem->mutex))
> +        {
> +            return false;
> +        }
> +
> +        return ret;
> +#else //__APPLE__
>          int ret = 0;
>          int32_t curCnt = cnt;
>          while (curCnt-- && !ret) {
> @@ -556,11 +643,82 @@ public:
>          }
>
>          return 0 == ret;
> +#endif //_APPLE__
>      }
>
>      bool take(const uint32_t time_out = TIMEOUT_INFINITE)
>      {
> -        if (TIMEOUT_INFINITE == time_out) {
> +        if (!m_sem)
> +        {
> +            return false;
> +        }
> +
> +#ifdef __APPLE__
> +
> +        if (pthread_mutex_lock(&m_sem->mutex))
> +        {
> +            return false;
> +        }
> +
> +        bool ret = true;
> +        if (TIMEOUT_INFINITE == time_out)
> +        {
> +            if (!m_sem->curCnt)
> +            {
> +                if (pthread_cond_wait(&m_sem->cond, &m_sem->mutex))
> +                {
> +                    ret = false;
> +                }
> +            }
> +
> +            if (m_sem->curCnt && ret)
> +            {
> +                m_sem->curCnt--;
> +            }
> +        }
> +        else
> +        {
> +            if (0 == time_out)
> +            {
> +                if (m_sem->curCnt)
> +                {
> +                    m_sem->curCnt--;
> +                }
> +                else
> +                {
> +                    ret = false;
> +                }
> +            }
> +            else
> +            {
> +                if (!m_sem->curCnt)
> +                {
> +                    struct timespec ts;
> +                    ts.tv_sec = time_out / 1000L;
> +                    ts.tv_nsec = (time_out * 1000000L) - ts.tv_sec * 1000
> * 1000 * 1000;
> +
> +                    if (pthread_cond_timedwait(&m_sem->cond,
> &m_sem->mutex, &ts))
> +                    {
> +                        ret = false;
> +                    }
> +                }
> +
> +                if (m_sem->curCnt && ret)
> +                {
> +                    m_sem->curCnt--;
> +                }
> +            }
> +        }
> +
> +        if (pthread_mutex_unlock(&m_sem->mutex))
> +        {
> +            return false;
> +        }
> +
> +        return ret;
> +#else //__APPLE__
> +        if (TIMEOUT_INFINITE == time_out)
> +        {
>              return 0 == sem_wait(m_sem);
>          }
>          else
> @@ -577,23 +735,46 @@ public:
>                  return 0 == sem_timedwait(m_sem, &ts);
>              }
>          }
> +#endif //_APPLE__
>      }
>
>      void release()
>      {
>          if (m_sem)
>          {
> +#ifdef __APPLE__
> +            pthread_condattr_destroy(&m_sem->condAttr);
> +            pthread_mutexattr_destroy(&m_sem->mutexAttr);
> +            pthread_mutex_destroy(&m_sem->mutex);
> +            pthread_cond_destroy(&m_sem->cond);
> +            free(m_sem);
> +            m_sem = NULL;
> +#else //__APPLE__
>              sem_close(m_sem);
>              sem_unlink(m_name);
>              m_sem = NULL;
>              free(m_name);
>              m_name = NULL;
> +#endif //__APPLE__
>          }
>      }
>
>  private:
> +#ifdef __APPLE__
> +    typedef struct
> +    {
> +        pthread_mutex_t     mutex;
> +        pthread_cond_t      cond;
> +        pthread_mutexattr_t mutexAttr;
> +        pthread_condattr_t  condAttr;
> +        uint32_t            curCnt;
> +        uint32_t            maxCnt;
> +    }mac_sem_t;
> +    mac_sem_t *m_sem;
> +#else // __APPLE__
>      sem_t *m_sem;
>      char  *m_name;
> +#endif // __APPLE_
>  };
>
>  #endif // ifdef _WIN32
> --
> 2.23.0.windows.1
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20211014/5184c65f/attachment.html>


More information about the x265-devel mailing list