Okay, if anybody has the time to try them out:

A patch for the original kfreebsd FTBFS:
https://raw.githubusercontent.com/thomaslee/hiredis-debian/master/debian/patches/08_kfreebsd_ftbfs.patch

And a work-around for the race I observed in the "invalid timeout" tests:
https://raw.githubusercontent.com/thomaslee/hiredis-debian/master/debian/patches/09_fix_test_race.patch

Both have been forwarded upstream but have not yet been applied. If there
are no pressing issues with these patches I'll request a new upload once
upstream has had a chance to look things over.


On Tue, Nov 17, 2015 at 3:40 AM, Tom Lee <deb...@tomlee.co> wrote:

> This was a much deeper rabbit hole than I expected, but I think I've
> worked it out. Most of the notes below are for my own benefit, but happy to
> elaborate if folks have any questions about the details. TL;DR is fmacros.h
> fails to detect kfreebsd as some sort of modern *nix & falls back to some
> old, weird implementation of strerror_r.
>
> To confirm my initial suspicion that this was just a platform-specific
> issue wrt error messages, I passed EAGAIN to strerror_r in a trivial
> program on kfreebsd-amd64 and got the "Resource unavailable" message that
> the hiredis tests expected first try. Given this result, I couldn't
> understand why we were getting empty error strings in the hiredis tests but
> not in my little isolated test. Back to the drawing board.
>
> The failures have to do with the semantics of GNU vs. XSI-compatible
> implementations of strerror_r described here:
> http://man7.org/linux/man-pages/man3/strerror.3.html
>
> When running tests, hiredis behaves as though the implementation in use is
> the GNU version, sometimes not filling the buffer provided to strerror_r
> with the appropriate error message -- this explains why we get blank error
> messages, since hiredis believes us to be using the XSI-compatible version
> & the __redis_strerror_r macro doesn't do any of the requisite footwork to
> handle the odd behavior of GNU's strerror_r.
>
> If we modify __redisSetError to call strerror_r directly (instead of
> indirectly via __redis_strerror_r) then try to capture the output of
> strerror_r in a char *, we wind up with invalid pointers on amd64 since the
> XSI API returns a 32-bit int value.
>
> If we force -D_GNU_SOURCE, we get build errors due to some bad macros in
> hiredis' GNU implementation of __redis_strerror_r. These are easily fixed.
> Once fixed, everything works perfectly -- though the GNU semantics are kind
> of stupid. I modified the build to force -D_XOPEN_SOURCE=600 & removed
> -D_GNU_SOURCE. Suddenly everything was using XSI-compatible semantics.
>
> But why didn't I need to do this sort of thing in my trivial test of
> strerror_r to get the expected behavior? Believe the strange behavior is
> because hiredis fmacros.h #defines _XOPEN_SOURCE with no value/version
> since it can't detect kfreebsd as "some modern *nix". With this
> "versionless" define and nothing else, we get the weird
> GNU-impl-with-XSI-API behavior that causes our tests to fail. We can force
> the right behavior by avoiding the fall-through branch in fmacros.h on
> kfbsd ... just need to think a little on how best to do it: have the
> preprocessor detect kfreebsd, or remove the fall-through branch all
> together to fall back to system defaults.
>
> On top of all this, it also looks like the "Set error when an invalid
> timeout {,u}sec value is given to redisConnectWithTimeout" tests appear to
> be failing due to a race: the test seems to assume that the connect() call
> will fail, but it's succeeding immediately. As a result the code to do the
> validation of tv_usec/tv_sec never gets executed.
>
> I'll try to get a few patches together for all this later in the week.
>
>
> On Mon, Nov 16, 2015 at 11:27 PM, Tom Lee <deb...@tomlee.co> wrote:
>
>> Alrighty, despite my fdisk woes a bit of "printf debugging" has revealed
>> the test failure is simply that c->errstr doesn't contain the message the
>> test expects (instead errstr is an empty string). Easy enough to work
>> around: I'll put a patch together in a few minutes & drop it on here for
>> folks to verify.
>>
>> I'd still be interested to know how I can resize partitions on kfreebsd
>> for future reference :)
>>
>> On Mon, Nov 16, 2015 at 11:20 PM, Tom Lee <deb...@tomlee.co> wrote:
>>
>>> Thanks Steven, that was really helpful. Got Cristoph's image up &
>>> running in VirtualBox with a little playing around and I've been able to
>>> reproduce the issue. However, I've hit something of a newbie problem:
>>> there's insufficient space on the disk image to install gdb & actually take
>>> a closer look at what's going on. I've increased the size of the image
>>> itself but fdisk doesn't seem to play nice (I get "fdisk: cannot open
>>> /dev/ada0: Operation not permitted").
>>>
>>> Is there some other tool I should be using to resize partitions under
>>> kfreebsd?
>>>
>>> On Sun, Nov 8, 2015 at 1:22 AM, Steven Chamberlain <ste...@pyro.eu.org>
>>> wrote:
>>>
>>>> Hello,
>>>>
>>>> Tom Lee wrote:
>>>> > I've had some trouble getting kfreebsd up and running in a VM
>>>>
>>>> Christoph has created a prebuilt VM image of jessie-kfreebsd, if that
>>>> helps you:
>>>> https://people.debian.org/~christoph/jessie-kfreebsd-vmimage.raw.xz
>>>>
>>>> Otherwise I will likely get around to looking at this bug myself.
>>>>
>>>> Regards,
>>>> --
>>>> Steven Chamberlain
>>>> ste...@pyro.eu.org
>>>>
>>>
>>>
>>>
>>> --
>>> *Tom Lee */ http://tomlee.co / @tglee <http://twitter.com/tglee>
>>>
>>>
>>
>>
>> --
>> *Tom Lee */ http://tomlee.co / @tglee <http://twitter.com/tglee>
>>
>>
>
>
> --
> *Tom Lee */ http://tomlee.co / @tglee <http://twitter.com/tglee>
>
>


-- 
*Tom Lee */ http://tomlee.co / @tglee <http://twitter.com/tglee>

Reply via email to