[Haskell-cafe] Stack space overflow in HaskellNet
Manfred Lotz
manfred.lotz at arcor.de
Wed Jul 27 16:07:26 CEST 2011
On Tue, 26 Jul 2011 14:17:08 -0700 (PDT)
Donn Cave <donn at avvanta.com> wrote:
> Quoth Manfred Lotz <manfred.lotz at arcor.de>,
> ...
> > I'm not quite sure I understand what you mean. Stack overflow comes
> > from this:
> > forM_ msgs (\x -> fetch con x >>= print)
> >
> > If I change it to:
> > mapM_ (\x -> fetch con x >>= print) msgs
> >
> > there is the same stack overflow.
>
> I didn't understand that myself, but neither do I know what might
> be wrong. One thing to consider is that email messages can be very
> large. Looking at messages received in the last 10 days I see I
> have one that exceeds your reported stack size, and that isn't
> counting the extra space required for text representation of non
> printing characters etc. There may be messages that you simply
> can't "print".
>
> The HaskellNet IMAP "fetch" is actually FETCH ... BODY[], i.e.,
> the whole contents of the message. Normal practice for giant data
> files is to send them as part of a MIME multipart/mixed message,
> and something like the above can proceed with a reasonable chance
> of success if it avoids these attachments by fetching BODY[1]
> (or BODY[1.1], etc. depending on actual structure.) I just fetched
> the 10Mb message I mentioned above to check the structure, and it
> happened in the blink of an eye - BODY[1] is smaller than the header.
>
> I don't see any support for fetch by part, you might have to hack
> that up yourself. You may ideally also want to fetch BODYSTRUCTURE,
> but practically I might go out on a limb and predict that you won't
> run into messages where the first part is a multipart/mixed with a
> large attachment - so if the object is just a survivable first part,
> you could live without BODYSTRUCTURE analysis and optimistically
> ask for BODY[1].
>
> Moving on to practical use of email via IMAP, you'd also want to
> be able to fetch and decode the attachments. At this point, it's
> interesting to return to the question of space requirements.
>
> Donn
The problem seems to lie in the HaskellNet package. If for example I
only fetch a specific message
m <- fetch con 2092
having a size of some 1.2m then I get the same stack overflow.
If at runtime I specify +RTS -K40M -RTS it works but takes over 40
seconds to fetch the message.
--
Manfred
More information about the Haskell-Cafe
mailing list