On Mar 5, 2020 10:15 AM, Steve Williams <st...@williamsitconsulting.com> wrote:
>
> Hi,
>
> Should this be on ports@?  I'm not working on a port...
>
> TL;DR:
> Does anyone have any recommendations on how to work around not having 
> pthread_mutexattr_setpshared in the OpenBSD pthreads library?
>

Have you tried searching the ports tree patch files for mention of the 
function. You may find a real world example of a workaround.

Edgar

> DETAILS:
> I wanted to see if Apache Guacamole would compile on OpenBSD to server 
> as a remote desktop gateway.
>
> It hasn't been too hard to get it to the final linking step.
>
> I am getting an "undefined reference to `pthread_mutexattr_setpshared'":
>
>     ../../src/libguac/.libs/libguac.so.17.0: undefined reference to
>     `pthread_mutexattr_setpshared'
>     collect2: ld returned 1 exit status
>     *** Error 1 in src/guacenc (Makefile:565 'guacenc': @echo " CCLD   
>     " guacenc;/bin/sh ../../libtool --silent --tag=CC --mode=link gcc -s...)
>     *** Error 1 in . (Makefile:556 'all-recursive')
>     *** Error 1 in /home/steve/src/guacamole-server-1.1.0 (Makefile:453
>     'all')
>
>
> When I look at some of the code using pthread_mutexattr_setpshared, it's 
> not #ifdef'd or anything, so I think it's pretty much mandatory code.
>
> pool.c:
>
>     guac_pool* guac_pool_alloc(int size) {
>
>          pthread_mutexattr_t lock_attributes;
>          guac_pool* pool = malloc(sizeof(guac_pool));
>
>          /* If unable to allocate, just return NULL. */
>          if (pool == NULL)
>              return NULL;
>
>          /* Initialize empty pool */
>          pool->min_size = size;
>          pool->active = 0;
>          pool->__next_value = 0;
>          pool->__head = NULL;
>          pool->__tail = NULL;
>
>          /* Init lock */
>          pthread_mutexattr_init(&lock_attributes);
>
>          pthread_mutexattr_setpshared(&lock_attributes,
>     PTHREAD_PROCESS_SHARED);
>     //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>          pthread_mutex_init(&(pool->__lock), &lock_attributes);
>
>
> It looks like this is a posix (of some version) function:
> https://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_mutexattr_setpshared.html
>
> An "appropos" search in the OpenBSD man pages for "pthread_mutexattr" 
> returned:
> https://man.openbsd.org/man3/pthread_mutexattr.3
>
> This function is definitely missing...
>
> I tried to see if there was a way to use pthread_mutexattr_settype to 
> accomplish the same thing, but got lost in the maze of documentation.
>
> Does anyone have any recommendations on how to work around not having 
> pthread_mutexattr_setpshared in the OpenBSD pthreads library?
>
> Thanks,
> Steve Williams
>

Reply via email to