Re: AccessInit: hash collision: 3 for both 1 and 1

Bill Janssen <[email protected]>
Newsgroups gmane.comp.python.image
Message-ID <[email protected]>
Fredrik Lundh <[email protected]> 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 <[email protected]> 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  -  [email protected]
> > http://mail.python.org/mailman/listinfo/image-sig
> >
_______________________________________________
Image-SIG maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/image-sig
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.