Menu

#145 Unnamed semaphores are not supported on Mac OS X

v1.1.x
closed
Appender (3)
5
2012-09-19
2012-09-18
No

Discussion

  • Christian Rüegg

    Taken from
    http://www.opensource.apple.com/source/freeradius/freeradius-36/freeradius/src/main/threads.c

    Please add surrounding ifdefs

    #include <mach/mach.h>
    #include <mach/task.h>
    #include <mach/semaphore.h>

    #undef sem_t
    #define sem_t semaphore_t
    #undef sem_init
    #define sem_init(s,p,c) semaphore_create(mach_task_self(),s,SYNC_POLICY_FIFO,c)
    #undef sem_wait
    #define sem_wait(s) semaphore_wait(*s)
    #undef sem_post
    #define sem_post(s) semaphore_signal(*s)
    #undef sem_destroy
    #define sem_destroy(s) semaphore_destroy(mach_task_self(),*s)

     
  • Václav Haisman

    Václav Haisman - 2012-09-18

    It seems that I could just use named semaphores on MacOS X instead. I do not want to use OS specific headers if I can avoid it. I'll see what I can do later today.

    Could you please give me the output of "echo | g++ -dD -E -" (or similar) command?

     
  • Christian Rüegg

    Named semaphores seem to work in my quick test. Except I had problems on app exit (crash in log thread). But this might be another bug.

    g++ --version
    i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)

    echo | g++ -dD -E -
    # 1 "<stdin>"
    # 1 "<built-in>"
    #define __STDC__ 1
    #define __STDC_HOSTED__ 1
    #define __GNUC__ 4
    #define __GNUC_MINOR__ 2
    #define __GNUC_PATCHLEVEL__ 1
    #define __APPLE_CC__ 5658
    #define __llvm__ 1
    #define __SIZE_TYPE__ long unsigned int
    #define __PTRDIFF_TYPE__ long int
    #define __WCHAR_TYPE__ int
    #define __WINT_TYPE__ int
    #define __INTMAX_TYPE__ long int
    #define __UINTMAX_TYPE__ long unsigned int
    #define __GXX_ABI_VERSION 1002
    #define __SCHAR_MAX__ 127
    #define __SHRT_MAX__ 32767
    #define __INT_MAX__ 2147483647
    #define __LONG_MAX__ 9223372036854775807L
    #define __LONG_LONG_MAX__ 9223372036854775807LL
    #define __WCHAR_MAX__ 2147483647
    #define __CHAR_BIT__ 8
    #define __INTMAX_MAX__ 9223372036854775807L
    #define __FLT_EVAL_METHOD__ 0
    #define __DEC_EVAL_METHOD__ 2
    #define __FLT_RADIX__ 2
    #define __FLT_MANT_DIG__ 24
    #define __FLT_DIG__ 6
    #define __FLT_MIN_EXP__ (-125)
    #define __FLT_MIN_10_EXP__ (-37)
    #define __FLT_MAX_EXP__ 128
    #define __FLT_MAX_10_EXP__ 38
    #define __FLT_MAX__ 3.40282347e+38F
    #define __FLT_MIN__ 1.17549435e-38F
    #define __FLT_EPSILON__ 1.19209290e-7F
    #define __FLT_DENORM_MIN__ 1.40129846e-45F
    #define __FLT_HAS_DENORM__ 1
    #define __FLT_HAS_INFINITY__ 1
    #define __FLT_HAS_QUIET_NAN__ 1
    #define __DBL_MANT_DIG__ 53
    #define __DBL_DIG__ 15
    #define __DBL_MIN_EXP__ (-1021)
    #define __DBL_MIN_10_EXP__ (-307)
    #define __DBL_MAX_EXP__ 1024
    #define __DBL_MAX_10_EXP__ 308
    #define __DBL_MAX__ 1.7976931348623157e+308
    #define __DBL_MIN__ 2.2250738585072014e-308
    #define __DBL_EPSILON__ 2.2204460492503131e-16
    #define __DBL_DENORM_MIN__ 4.9406564584124654e-324
    #define __DBL_HAS_DENORM__ 1
    #define __DBL_HAS_INFINITY__ 1
    #define __DBL_HAS_QUIET_NAN__ 1
    #define __LDBL_MANT_DIG__ 64
    #define __LDBL_DIG__ 18
    #define __LDBL_MIN_EXP__ (-16381)
    #define __LDBL_MIN_10_EXP__ (-4931)
    #define __LDBL_MAX_EXP__ 16384
    #define __LDBL_MAX_10_EXP__ 4932
    #define __DECIMAL_DIG__ 21
    #define __LDBL_MAX__ 1.18973149535723176502e+4932L
    #define __LDBL_MIN__ 3.36210314311209350626e-4932L
    #define __LDBL_EPSILON__ 1.08420217248550443401e-19L
    #define __LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L
    #define __LDBL_HAS_DENORM__ 1
    #define __LDBL_HAS_INFINITY__ 1
    #define __LDBL_HAS_QUIET_NAN__ 1
    #define __DEC32_MANT_DIG__ 7
    #define __DEC32_MIN_EXP__ (-95)
    #define __DEC32_MAX_EXP__ 96
    #define __DEC32_MIN__ 1E-95DF
    #define __DEC32_MAX__ 9.999999E96DF
    #define __DEC32_EPSILON__ 1E-6DF
    #define __DEC32_DEN__ 0.000001E-95DF
    #define __DEC64_MANT_DIG__ 16
    #define __DEC64_MIN_EXP__ (-383)
    #define __DEC64_MAX_EXP__ 384
    #define __DEC64_MIN__ 1E-383DD
    #define __DEC64_MAX__ 9.999999999999999E384DD
    #define __DEC64_EPSILON__ 1E-15DD
    #define __DEC64_DEN__ 0.000000000000001E-383DD
    #define __DEC128_MANT_DIG__ 34
    #define __DEC128_MIN_EXP__ (-6143)
    #define __DEC128_MAX_EXP__ 6144
    #define __DEC128_MIN__ 1E-6143DL
    #define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
    #define __DEC128_EPSILON__ 1E-33DL
    #define __DEC128_DEN__ 0.000000000000000000000000000000001E-6143DL
    #define __REGISTER_PREFIX__
    #define __USER_LABEL_PREFIX__ _
    #define __VERSION__ "4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)"
    #define __GNUC_GNU_INLINE__ 1
    #define _LP64 1
    #define __LP64__ 1
    #define __BLOCKS__ 1
    #define __NO_INLINE__ 1
    #define __FINITE_MATH_ONLY__ 0
    #define __pic__ 2
    #define __PIC__ 2
    #define __SSP__ 1
    #define __amd64 1
    #define __amd64__ 1
    #define __x86_64 1
    #define __x86_64__ 1
    #define __tune_core2__ 1
    #define __MMX__ 1
    #define __SSE__ 1
    #define __SSE2__ 1
    #define __SSE3__ 1
    #define __SSE_MATH__ 1
    #define __SSE2_MATH__ 1
    #define __k8 1
    #define __k8__ 1
    #define __NO_MATH_INLINES 1
    #define __LITTLE_ENDIAN__ 1
    #define __MACH__ 1
    #define __APPLE__ 1

    clang --version
    Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn)
    Target: x86_64-apple-darwin12.1.0

    echo | xcrun clang -dD -E -
    # 1 "<stdin>"
    # 1 "<stdin>" 1
    # 1 "<built-in>" 1
    # 1 "<built-in>" 3
    #define __llvm__ 1
    #define __clang__ 1
    #define __clang_major__ 4
    #define __clang_minor__ 0
    #define __clang_patchlevel__ 0
    #define __clang_version__ "4.0 ((tags/Apple/clang-421.0.60))"
    #define __GNUC_MINOR__ 2
    #define __GNUC_PATCHLEVEL__ 1
    #define __GNUC__ 4
    #define __GXX_ABI_VERSION 1002
    #define __ATOMIC_RELAXED 0
    #define __ATOMIC_CONSUME 1
    #define __ATOMIC_ACQUIRE 2
    #define __ATOMIC_RELEASE 3
    #define __ATOMIC_ACQ_REL 4
    #define __ATOMIC_SEQ_CST 5
    #define __PRAGMA_REDEFINE_EXTNAME 1
    #define __VERSION__ "4.2.1 Compatible Apple Clang 4.0 ((tags/Apple/clang-421.0.60))"
    #define __CONSTANT_CFSTRINGS__ 1
    #define __block __attribute__((__blocks__(byref)))
    #define __BLOCKS__ 1
    #define __GXX_RTTI 1
    #define __CHAR_BIT__ 8
    #define __SCHAR_MAX__ 127
    #define __SHRT_MAX__ 32767
    #define __INT_MAX__ 2147483647
    #define __LONG_MAX__ 9223372036854775807L
    #define __LONG_LONG_MAX__ 9223372036854775807LL
    #define __WCHAR_MAX__ 2147483647
    #define __INTMAX_MAX__ 9223372036854775807L
    #define __SIZEOF_DOUBLE__ 8
    #define __SIZEOF_FLOAT__ 4
    #define __SIZEOF_INT__ 4
    #define __SIZEOF_LONG__ 8
    #define __SIZEOF_LONG_DOUBLE__ 16
    #define __SIZEOF_LONG_LONG__ 8
    #define __SIZEOF_POINTER__ 8
    #define __SIZEOF_SHORT__ 2
    #define __SIZEOF_PTRDIFF_T__ 8
    #define __SIZEOF_SIZE_T__ 8
    #define __SIZEOF_WCHAR_T__ 4
    #define __SIZEOF_WINT_T__ 4
    #define __INTMAX_TYPE__ long int
    #define __UINTMAX_TYPE__ long unsigned int
    #define __INTMAX_WIDTH__ 64
    #define __PTRDIFF_TYPE__ long int
    #define __PTRDIFF_WIDTH__ 64
    #define __INTPTR_TYPE__ long int
    #define __INTPTR_WIDTH__ 64
    #define __SIZE_TYPE__ long unsigned int
    #define __SIZE_WIDTH__ 64
    #define __WCHAR_TYPE__ int
    #define __WCHAR_WIDTH__ 32
    #define __WINT_TYPE__ int
    #define __WINT_WIDTH__ 32
    #define __SIG_ATOMIC_WIDTH__ 32
    #define __CHAR16_TYPE__ unsigned short
    #define __CHAR32_TYPE__ unsigned int
    #define __FLT_DENORM_MIN__ 1.40129846e-45F
    #define __FLT_HAS_DENORM__ 1
    #define __FLT_DIG__ 6
    #define __FLT_EPSILON__ 1.19209290e-7F
    #define __FLT_HAS_INFINITY__ 1
    #define __FLT_HAS_QUIET_NAN__ 1
    #define __FLT_MANT_DIG__ 24
    #define __FLT_MAX_10_EXP__ 38
    #define __FLT_MAX_EXP__ 128
    #define __FLT_MAX__ 3.40282347e+38F
    #define __FLT_MIN_10_EXP__ (-37)
    #define __FLT_MIN_EXP__ (-125)
    #define __FLT_MIN__ 1.17549435e-38F
    #define __DBL_DENORM_MIN__ 4.9406564584124654e-324
    #define __DBL_HAS_DENORM__ 1
    #define __DBL_DIG__ 15
    #define __DBL_EPSILON__ 2.2204460492503131e-16
    #define __DBL_HAS_INFINITY__ 1
    #define __DBL_HAS_QUIET_NAN__ 1
    #define __DBL_MANT_DIG__ 53
    #define __DBL_MAX_10_EXP__ 308
    #define __DBL_MAX_EXP__ 1024
    #define __DBL_MAX__ 1.7976931348623157e+308
    #define __DBL_MIN_10_EXP__ (-307)
    #define __DBL_MIN_EXP__ (-1021)
    #define __DBL_MIN__ 2.2250738585072014e-308
    #define __LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L
    #define __LDBL_HAS_DENORM__ 1
    #define __LDBL_DIG__ 18
    #define __LDBL_EPSILON__ 1.08420217248550443401e-19L
    #define __LDBL_HAS_INFINITY__ 1
    #define __LDBL_HAS_QUIET_NAN__ 1
    #define __LDBL_MANT_DIG__ 64
    #define __LDBL_MAX_10_EXP__ 4932
    #define __LDBL_MAX_EXP__ 16384
    #define __LDBL_MAX__ 1.18973149535723176502e+4932L
    #define __LDBL_MIN_10_EXP__ (-4931)
    #define __LDBL_MIN_EXP__ (-16381)
    #define __LDBL_MIN__ 3.36210314311209350626e-4932L
    #define __POINTER_WIDTH__ 64
    #define __INT8_TYPE__ char
    #define __INT16_TYPE__ short
    #define __INT32_TYPE__ int
    #define __INT64_TYPE__ long long int
    #define __INT64_C_SUFFIX__ LL

    #define __USER_LABEL_PREFIX__ _
    #define __FINITE_MATH_ONLY__ 0
    #define __GNUC_STDC_INLINE__ 1
    #define __NO_INLINE__ 1
    #define __PIC__ 1
    #define __pic__ 1
    #define __FLT_EVAL_METHOD__ 0
    #define __FLT_RADIX__ 2
    #define __DECIMAL_DIG__ 21
    #define __SSP__ 1
    #define _LP64 1
    #define __LP64__ 1
    #define __amd64__ 1
    #define __amd64 1
    #define __x86_64 1
    #define __x86_64__ 1
    #define __core2 1
    #define __core2__ 1
    #define __tune_core2__ 1
    #define __LITTLE_ENDIAN__ 1
    #define __REGISTER_PREFIX__
    #define __NO_MATH_INLINES 1
    #define __SSSE3__ 1
    #define __SSE3__ 1
    #define __SSE2__ 1
    #define __SSE2_MATH__ 1
    #define __SSE__ 1
    #define __SSE_MATH__ 1
    #define __MMX__ 1
    #define __APPLE_CC__ 5621
    #define __APPLE__ 1
    #define __MACH__ 1
    #define OBJC_NEW_PROPERTIES 1
    #define __apple_build_version__ 4210060
    #define __weak __attribute__((objc_gc(weak)))
    #define __strong
    #define __unsafe_unretained
    #define __DYNAMIC__ 1
    #define __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ 1080
    #define __STDC__ 1
    #define __STDC_HOSTED__ 1
    #define __STDC_VERSION__ 199901L

    # 1 "<command line>" 1
    # 1 "<built-in>" 2
    # 1 "<stdin>" 2

     
  • Václav Haisman

    Václav Haisman - 2012-09-18
     
  • Václav Haisman

    Václav Haisman - 2012-09-18

    Thank you. I have attached a diff that fixes both of the problems that you have reported today. I have reimplemented Semaphore using named POSIX semaphores for MacOS X. Please try it and tell me if it works well for you.

     
  • Václav Haisman

    Václav Haisman - 2012-09-18
    • status: open --> open-remind
     
  • Christian Rüegg

    Compiles fine and seems to run. ;-)
    Thanks

     
  • Václav Haisman

    Václav Haisman - 2012-09-19
    • status: open-remind --> closed-fixed
     
  • Václav Haisman

    Václav Haisman - 2012-09-19

    Thank you for the bug report and testing.

     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.