Py-Extension Irregularity

Michael Wieher michael.wieher at gmail.com
Thu Mar 6 21:34:45 CET 2008


Ah.  Well, that is true =)

Still, the fact of the file-pointer shifting more than 16-increments to the
right is insane.  Its a simple read(&struct,16) command.

but you're right, the problem might lie elsewhere.  I forgot that using 0
for a sentinel value in two places can confuse a complier (let alone me.)

I ended up fixing it by resetting the file-pointer to zero on re-entry, and
then manually fseeking() to the correct location each time.  Its one extra
command per iteration, but not a huge speed issue.
I feel bad using a global file object, but its that or I open/close it every
time I call the funct.

Thanks for pointing out that bit of confusion =)

2008/3/6, Gabriel Genellina <gagsl-py2 at yahoo.com.ar>:
>
> En Thu, 06 Mar 2008 13:54:44 -0200, Michael Wieher
> <michael.wieher at gmail.com> escribi�:
>
>
> > Observe.
> >
> > Python Code Snippet:
> > ====================
> > ...
> >  66         while i < (self.nPCodes):
> >  67            # print "%s:%s" % (self.nPCodes,i)
> >  68             (c,l,sn,f,fn,sz) = tabmodule.getQuestion(i,self.mx3Path)
> >  69             if _debug and sz>0:
> >  70                 _newPtrLoc = tabmodule.getMx3Ptr()
> >  71                 _diff = _newPtrLoc-_oldPtrLoc
> >  72                 _oldPtrLoc = _newPtrLoc
> >  73                 if _diff>16:
> >  74                     print _diff
> > ....
> >
> > C++ Code Snippet:
> > ---------------------------
> > 189 static PyObject*
> > 190 tabmodule_getMx3Ptr(PyObject * self, PyObject * args) {
> > 191     int a;
> > 192     a=mx3File.tellg();
> > 193     return Py_BuildValue("i",a);
> > 194 }
> > ...
> >
> > 189 PyObject *
> > 190 tabmodule_getQuestion(PyObject * self, PyObject * args) {
> > ....
> > 208    mx3File.read((char*)&m_mdx,16);
> > ....
> > 237     //if(m_mdx.size==0)
> > 238         return Py_BuildValue("iiiiii",0,0,0,0,0,0);
> > 239     //return Py_BuildValue("iiiiii",m_mdx.compression,
> > m_mdx.location,
> > m_mdx.stacknotes, m_mdx.file, m_mdx.footnote, m_mdx.size);
> > }
> >
> > Output==
> > michael at majw-m65:~/MRI/tabModule$ ./tabModule.py
> > michael at majw-m65:~/MRI/tabModule$
> >
> > None.  (ie: the _diff is always 16 or less, which is what is SHOULD be,
> > in
> > fact, it is always 16.)
>
>
> Why do you assert that? With those commented out lines, the last item
> returned by getQuestion (sz) is always 0; nothing is printed because sz==0
> and the python code never enters the outer if. From that evidence I can't
> say anything about _diff.
>
>
> > Observe!!!!
> >
> > 237     if(m_mdx.size==0)
> > 238         return Py_BuildValue("iiiiii",0,0,0,0,0,0);
> > 239     return Py_BuildValue("iiiiii",m_mdx.compression, m_mdx.location,
> > m_mdx.stacknotes, m_mdx.file, m_mdx.footnote, m_mdx.size);
> >
> > By uncommenting line 237 and 239, we see:
> > ...
> > 64
> > 80
> > 32
> > 32
> > 32
> > 48
> > 128
> > 160
> > 32
> > 32
> > 64
> > ....
> >
> > Most of the numbers are still 16, but _diff is often larger than 16, by
> > some
> > multiple.
>
>
> I'd print m_mdx values in the C++ source.
>
>
> > How in Buddah's name is returning a Py_BuildValue() affecting a file
> > pointer
> > that isn't being used at all in the function????
>
>
> I don't think this is the cause...
>
> --
> Gabriel Genellina
>
>
> --
> http://mail.python.org/mailman/listinfo/python-list
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20080306/70c02765/attachment.html>


More information about the Python-list mailing list