[Image-SIG] AccessInit: hash collision: 3 for both 1 and 1

Bill Janssen janssen at parc.com
Thu Apr 8 20:17:32 CEST 2010


Fredrik Lundh <fredrik at pythonware.com> wrote:

> The idea is that add_item should only be called once for each mode
> (see ImagingAccessInit).  What did you do to trick Python into calling
> the module initializer multiple times?

I was using epydoc and docutils 0.5 to build my documentation.  Epydoc
crashed with this error.  If you google "AccessInit: hash collision: 3
for both 1 and 1", you'll see it's not just me.  After I applied my
patch, things seem to work fine.

Seems to be a problem with Django and Sphinx and Satchmo, too.  And
it looks like maybe it only occurs on Windows.  I ran into it using
PIL built with msys for Python 2.6.4 on Windows XP.  I've never seen
it on OS X or Ubuntu or Fedora.

By the way, "exit(1)" is pretty harsh.  Shouldn't you somehow throw a
Python exception there?  Give us a better chance of figuring out where
it's being called from.

Bill

> 
> </F>
> 
> On Mon, Apr 5, 2010 at 4:41 AM, Bill Janssen <janssen at parc.com> wrote:
> > Seems to me that in libImaging, Access.c:add_item should really read
> >
> > static ImagingAccess
> > add_item(const char* mode)
> > {
> >    UINT32 i = hash(mode);
> >    /* printf("hash %s => %d\n", mode, i); */
> >    if (access_table[i].mode && (strcmp(mode, access_table[i].mode) != 0)) {
> >        fprintf(stderr, "AccessInit: hash collision: %d for both %s and %s\n",
> >                i, mode, access_table[i].mode);
> >        exit(1);
> >    }
> >    access_table[i].mode = mode;
> >    return &access_table[i];
> > }
> >
> > Currently, it reads:
> >
> > static ImagingAccess
> > add_item(const char* mode)
> > {
> >    UINT32 i = hash(mode);
> >    /* printf("hash %s => %d\n", mode, i); */
> >    if (access_table[i].mode) {
> >        fprintf(stderr, "AccessInit: hash collision: %d for both %s and %s\n",
> >                i, mode, access_table[i].mode);
> >        exit(1);
> >    }
> >    access_table[i].mode = mode;
> >    return &access_table[i];
> > }
> >
> > And there's a number of Google hits for "AccessInit: hash collision: 3
> > for both 1 and 1", starting about the release of 1.1.7.
> >
> > Bill
> > _______________________________________________
> > Image-SIG maillist  -  Image-SIG at python.org
> > http://mail.python.org/mailman/listinfo/image-sig
> >


More information about the Image-SIG mailing list