Il giorno 23/lug/2014, alle ore 12:22, Konstantin Belousov 
<kostik...@gmail.com> ha scritto:

> On Mon, Jul 21, 2014 at 03:44:59PM +0000, Pedro F. Giffuni wrote:
>> Author: pfg
>> Date: Mon Jul 21 15:44:59 2014
>> New Revision: 268945
>> URL: http://svnweb.freebsd.org/changeset/base/268945
>> 
>> Log:
>>  Fix hdestroy() compliance issue.
>> 
>>  The hcreate(3) implementation and related functions we inherited
>>  from NetBSD used to free() the key value, something that is not
>>  supported by the standard implementation.
>> 
>>  This would cause a segmentation fault when attempting to run
>>  the examples from the opengroup and linux manpages.  NetBSD
>>  has added non-standard calls to provide the previous
>>  behaviour but hdestroy is not very commonly used so at this
>>  time it seems excessive to bring those to FreeBSD.
>> 
>>  Bump the __FreeBSD_version as this is an ABI change.
>> 
>>  Reference:
>>  http://bugs.dragonflybsd.org/issues/1398
>> 
>>  MFC after:  2 weeks
>> 
>> Modified:
>>  head/lib/libc/stdlib/hcreate.c
>>  head/sys/sys/param.h
>> 
>> Modified: head/lib/libc/stdlib/hcreate.c
>> ==============================================================================
>> --- head/lib/libc/stdlib/hcreate.c   Mon Jul 21 15:26:52 2014        
>> (r268944)
>> +++ head/lib/libc/stdlib/hcreate.c   Mon Jul 21 15:44:59 2014        
>> (r268945)
>> @@ -159,7 +159,6 @@ hdestroy_r(struct hsearch_data *head)
>>              while (!SLIST_EMPTY(&table[idx])) {
>>                      ie = SLIST_FIRST(&table[idx]);
>>                      SLIST_REMOVE_HEAD(&table[idx], link);
>> -                    free(ie->ent.key);
>>                      free(ie);
>>              }
>>      }
>> 
>> Modified: head/sys/sys/param.h
>> ==============================================================================
>> --- head/sys/sys/param.h     Mon Jul 21 15:26:52 2014        (r268944)
>> +++ head/sys/sys/param.h     Mon Jul 21 15:44:59 2014        (r268945)
>> @@ -58,7 +58,7 @@
>>  *           in the range 5 to 9.
>>  */
>> #undef __FreeBSD_version
>> -#define __FreeBSD_version 1100027   /* Master, propagated to newvers */
>> +#define __FreeBSD_version 1100028   /* Master, propagated to newvers */
>> 
>> /*
>>  * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
> You broke the ABI.  This is absolute stopper for the symversioned
> fundamental library.
> 

I thought about it for a while.
Actually .. I didn’t. The interface remains unchanged, I only fixed an 
undocumented bug.

I say undocumented because while he NetBSD man page did document the bug, our 
man page has always claimed compliance .

> The right thing to do is to introduce a new version of hcreate() for FBSD_1.4,
> and provide compat shims with the old behaviour for FBSD_1.0.

hcreate() is not used in the base: all consumers (ports tree) are likely to 
expect the standard behavior so this change saves them from a segmentation 
fault. In the rare case of someone having developed their code for the broken 
function, the worst they will see is a memory leak.

A compat shim would be really ugly :(.

Pedro.



_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to