On Sat, Jun 3, 2017 at 2:20 AM, William A Rowe Jr <wr...@rowe-clan.net> wrote:
> On Fri, Jun 2, 2017 at 6:02 PM, Yann Ylavic <ylavic....@gmail.com> wrote:
>> On Fri, Jun 2, 2017 at 8:37 PM,  <wr...@apache.org> wrote:
>>> Author: wrowe
>>> Date: Fri Jun  2 18:37:33 2017
>>> New Revision: 1797416
>>>
>>> URL: http://svn.apache.org/viewvc?rev=1797416&view=rev
>>> Log:
>>> On Windows, OS2 and BEOS, the singluar lock mechanisms were already 
>>> compatible
>>> with timed locks, so there is no delta between DEFAULT and DEFAULT_TIMED.
>>>
>>> Avoid prohibited API changes to typical OS lock information.
>>
>> But these locks are also DEFAULT_TIMED, so a portable code (runnable
>> on these or Unixes) which like to check DEFAULT_TIMED to know whether
>> _timedlock() is available can't.
>
> You were changing the API behavior between 1.5.x and 1.7.x branches,
> and that's never permissible, so the code on 1.7.x was incorrect. It would
> also be awfully bad form in 2.0 to suddenly return a "different"ly identical
> mutex with a different lockmech value.

Agreed.

>
>> How about DEFAULT_TIMED = DEFAULT as we discussed already?
>
> That's a possibility, but not necessary. On the downside, that would be
> a compile time value. On unix, you may have compiled where there is
> _DEFAULT_TIMED of _SYSVSEM, but at runtime apr had been
> recompiled to use _POSIX. Worse yet, you would now force _DEFAULT
> to remain sysv if that was it's runtime identity, the entire choose-best
> logic would be bypassed if the _DEFAULT[_TIMED] enums were no
> longer constant.

I don't get it.

typedef enum {
    APR_LOCK_FCNTL,         /**< fcntl() */
    APR_LOCK_FLOCK,         /**< flock() */
    APR_LOCK_SYSVSEM,       /**< System V Semaphores */
    APR_LOCK_PROC_PTHREAD,  /**< POSIX pthread process-based locking */
    APR_LOCK_POSIXSEM,      /**< POSIX semaphore process-based locking */
    APR_LOCK_DEFAULT,       /**< Use the default process lock */
#ifdef _UNIX_LIKE_
    APR_LOCK_DEFAULT_TIMED  /**< Use the default process timed lock */
#else
    APR_LOCK_DEFAULT_TIMED  = APR_LOCK_DEFAULT
#endif
} apr_lockmech_e;

is a constant thing no?

>
> You identified it yourself, the _DEFAULT is a request for the appropriate
> mutex type, on unix, _DEFAULT is not returned for the lockmech, but the
> actual _SYSVSEM, or _POSIX, or _FILE or whatever was used.
>
> Likewise _DEFAULT_TIMED means nothing on read, only on set, as
> it is a request for a class of lockmech that is most appropriate *and*
> is capable of _TIMED ops.

Right, but why apr_os_mutex_set[_ex](DEFAULT_TIMED) should fail on
Windows, OS2 and BEOS?
APR_LOCK_DEFAULT_TIMED = APR_LOCK_DEFAULT allows this, and does not
break with _get[_ex]() either I think.

Reply via email to