<div dir="ltr">You would need the NOINLINE pragma:<div><br></div><div>    {-# NOINLINE eventObj_ #-}</div><div><span style="font-family:arial,sans-serif;font-size:13px">    eventObj_ :: Ptr Event</span><br style="font-family:arial,sans-serif;font-size:13px">
<span style="font-family:arial,sans-serif;font-size:13px">    eventObj_ = unsafePerformIO malloc</span><br></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">I would avoid this sort of global state in general.  It isn't clear that this will give an improvement in performance and what could otherwise possible be a thread safe API is no longer thread safe.  Global TVars and MVars are much more compelling as they are thread safe and represent some global synchronization in your program.</span></div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jan 29, 2014 at 10:03 AM, Ömer Sinan Ağacan <span dir="ltr"><<a href="mailto:omeragacan@gmail.com" target="_blank">omeragacan@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I was also wondering a similar thing. I'm writing FFI for a C library.<br>
Library has a function like:<br>
<br>
    int pollEvent(EventType* event);<br>
<br>
Instead of malloc'ing a new EventType in a FFI call for this functions:<br>
<br>
    pollEvent :: IO Event<br>
    pollEvent = do<br>
      ev <- malloc<br>
      ret <- cPollEvent ev<br>
      -- check if ret is 0 etc.<br>
      peek ev<br>
<br>
I was wondering if something like this is also safe:<br>
<br>
    eventObj_ :: Ptr Event<br>
    eventObj_ = unsafePerformIO malloc<br>
<br>
    pollEvent :: IO Event<br>
    pollEvent = do<br>
      ret <- cPollEvent eventObj_<br>
      -- check if ret is 0 etc.<br>
      peek eventObj_<br>
<br>
This is one malloc cheaper for every call, and differences are not<br>
visible from user side. Still, I did not use this in my FFI bindings<br>
because I was not sure how safe is this approach. Any ideas on this?<br>
<br>
<br>
---<br>
Ömer Sinan Ağacan<br>
<a href="http://osa1.net" target="_blank">http://osa1.net</a><br>
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br></div>