Yes I was using the official source. <div><br></div><div>Here is the patch of my changes, some of which you may already have.</div><div><br></div><div><div>diff -r 52bfa939fc07 src/auto/configure</div><div>--- a/src/auto/configure<span class="" style="white-space:pre">        </span>Thu Dec 06 21:30:29 2012 +0100</div>
<div>+++ b/src/auto/configure<span class="" style="white-space:pre">        </span>Sun Dec 16 14:37:19 2012 -0800</div><div>@@ -4927,7 +4927,8 @@</div><div> </div><div>   if test &quot;X$vi_cv_path_mzscheme_pfx&quot; != &quot;X&quot;; then</div>
<div>     if test &quot;x$MACOSX&quot; = &quot;xyes&quot;; then</div><div>-      MZSCHEME_LIBS=&quot;-framework PLT_MzScheme&quot;</div><div>+      MZSCHEME_LIBS=&quot;-framework Racket&quot;</div><div>+      MZSCHEME_CFLAGS=&quot;-DMZ_PRECISE_GC&quot;</div>
<div>     elif test -f &quot;${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a&quot;; then</div><div>       MZSCHEME_LIBS=&quot;${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a&quot;</div><div>       MZSCHEME_CFLAGS=&quot;-DMZ_PRECISE_GC&quot;</div>
<div>@@ -4968,6 +4969,10 @@</div><div>       else</div><div> <span class="" style="white-space:pre">        </span>if test -d $vi_cv_path_mzscheme_pfx/share/racket/collects; then</div><div> <span class="" style="white-space:pre">        </span>  SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/</div>
<div>+        else</div><div>+<span class="" style="white-space:pre">        </span>  if test -d $vi_cv_path_mzscheme_pfx/collects; then</div><div>+<span class="" style="white-space:pre">        </span>    SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/</div>
<div>+<span class="" style="white-space:pre">        </span>  fi</div><div> <span class="" style="white-space:pre">        </span>fi</div><div>       fi</div><div>     fi</div><div>diff -r 52bfa939fc07 src/if_mzsch.c</div><div>--- a/src/if_mzsch.c<span class="" style="white-space:pre">        </span>Thu Dec 06 21:30:29 2012 +0100</div>
<div>+++ b/src/if_mzsch.c<span class="" style="white-space:pre">        </span>Sun Dec 16 14:37:19 2012 -0800</div><div>@@ -183,6 +183,8 @@</div><div> }</div><div> static int buffer_fixup_proc(void *obj)</div><div> {</div><div>+    vim_mz_buffer* buf = (vim_mz_buffer*) obj;</div>
<div>+    buf-&gt;buf-&gt;b_mzscheme_ref = GC_fixup_self(obj);</div><div>     return buffer_size_proc(obj);</div><div> }</div><div> static int window_size_proc(void *obj UNUSED)</div><div>@@ -195,6 +197,8 @@</div><div> }</div>
<div> static int window_fixup_proc(void *obj)</div><div> {</div><div>+    vim_mz_window* win = (vim_mz_window*) obj;</div><div>+    win-&gt;win-&gt;w_mzscheme_ref = GC_fixup_self(obj);</div><div>     return window_size_proc(obj);</div>
<div> }</div><div> #endif</div><div>@@ -861,6 +865,12 @@</div><div>     scheme_set_stack_base(stack_base, 1);</div><div> #endif</div><div> </div><div>+#ifndef TRAMPOLINED_MZVIM_STARTUP</div><div>+    /* in newer versions of precise GC the initial env has been created */</div>
<div>+    environment = scheme_basic_env();</div><div>+#endif</div><div>+    MZ_GC_CHECK();</div><div>+</div><div>     MZ_REGISTER_STATIC(environment);</div><div>     MZ_REGISTER_STATIC(curout);</div><div>     MZ_REGISTER_STATIC(curerr);</div>
<div>@@ -869,10 +879,6 @@</div><div>     MZ_REGISTER_STATIC(exn_message);</div><div>     MZ_REGISTER_STATIC(vim_exn);</div><div> </div><div>-#ifndef TRAMPOLINED_MZVIM_STARTUP</div><div>-    /* in newer versions of precise GC the initial env has been created */</div>
<div>-    environment = scheme_basic_env();</div><div>-#endif</div><div>     MZ_GC_CHECK();</div><div> </div><div> #ifdef INCLUDE_MZSCHEME_BASE</div><div>@@ -925,11 +931,7 @@</div><div> <span class="" style="white-space:pre">        </span>MZ_GC_CHECK();</div>
<div> <span class="" style="white-space:pre">        </span>coll_path = scheme_char_string_to_path(coll_char_string);</div><div> <span class="" style="white-space:pre">        </span>MZ_GC_CHECK();</div><div>-<span class="" style="white-space:pre">        </span>coll_pair = scheme_make_pair(coll_path, scheme_null);</div>
<div>-<span class="" style="white-space:pre">        </span>MZ_GC_CHECK();</div><div>-<span class="" style="white-space:pre">        </span>config = scheme_config;</div><div>-<span class="" style="white-space:pre">        </span>MZ_GC_CHECK();</div>
<div>-<span class="" style="white-space:pre">        </span>scheme_set_param(config, MZCONFIG_COLLECTION_PATHS, coll_pair);</div><div>+        scheme_set_collects_path(coll_path);</div><div> <span class="" style="white-space:pre">        </span>MZ_GC_CHECK();</div>
<div> <span class="" style="white-space:pre">        </span>MZ_GC_UNREG();</div><div>     }</div><div>@@ -1016,10 +1018,10 @@</div><div> #ifdef MZ_PRECISE_GC</div><div>     GC_register_traversers(mz_buffer_type,</div><div> <span class="" style="white-space:pre">        </span>    buffer_size_proc, buffer_mark_proc, buffer_fixup_proc,</div>
<div>-<span class="" style="white-space:pre">        </span>    TRUE, TRUE);</div><div>+<span class="" style="white-space:pre">        </span>    TRUE, FALSE);</div><div>     GC_register_traversers(mz_window_type,</div><div> <span class="" style="white-space:pre">        </span>    window_size_proc, window_mark_proc, window_fixup_proc,</div>
<div>-<span class="" style="white-space:pre">        </span>    TRUE, TRUE);</div><div>+<span class="" style="white-space:pre">        </span>    TRUE, FALSE);</div><div> #endif</div><div> </div><div>     make_modules();</div><div>@@ -1652,7 +1654,7 @@</div>
<div>     if (win-&gt;w_mzscheme_ref != NULL)</div><div> <span class="" style="white-space:pre">        </span>return win-&gt;w_mzscheme_ref;</div><div> </div><div>-    self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_window));</div>
<div>+    self = scheme_malloc_fail_ok(scheme_malloc_tagged, sizeof(vim_mz_window));</div><div>     vim_memset(self, 0, sizeof(vim_mz_window));</div><div>     scheme_dont_gc_ptr(self);<span class="" style="white-space:pre">        </span>/* because win isn&#39;t visible to GC */</div>
<div>     MZ_GC_CHECK();</div><div>@@ -1977,7 +1979,7 @@</div><div>     if (buf-&gt;b_mzscheme_ref)</div><div> <span class="" style="white-space:pre">        </span>return buf-&gt;b_mzscheme_ref;</div><div> </div><div>-    self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_buffer));</div>
<div>+    self = scheme_malloc_fail_ok(scheme_malloc_tagged, sizeof(vim_mz_buffer));</div><div>     vim_memset(self, 0, sizeof(vim_mz_buffer));</div><div>     scheme_dont_gc_ptr(self); /* because buf isn&#39;t visible to GC */</div>
<div>     MZ_GC_CHECK();</div><div>@@ -2298,8 +2300,8 @@</div><div> <span class="" style="white-space:pre">        </span>    MZ_GC_VAR_IN_REG(1, rest);</div><div> <span class="" style="white-space:pre">        </span>    MZ_GC_REG();</div>
<div> </div><div>-<span class="" style="white-space:pre">        </span>    array = (char **)alloc(new_len * sizeof(char *));</div><div>-<span class="" style="white-space:pre">        </span>    vim_memset(array, 0, new_len * sizeof(char *));</div>
<div>+<span class="" style="white-space:pre">        </span>    array = (char **)alloc((new_len + 1) * sizeof(char *));</div><div>+<span class="" style="white-space:pre">        </span>    vim_memset(array, 0, (new_len + 1) * sizeof(char *));</div>
<div> </div><div> <span class="" style="white-space:pre">        </span>    rest = line_list;</div><div> <span class="" style="white-space:pre">        </span>    for (i = 0; i &lt; new_len; ++i)</div><div>@@ -2481,8 +2483,8 @@</div><div>
 <span class="" style="white-space:pre">        </span>MZ_GC_VAR_IN_REG(1, rest);</div><div> <span class="" style="white-space:pre">        </span>MZ_GC_REG();</div><div> </div><div>-<span class="" style="white-space:pre">        </span>array = (char **)alloc(size * sizeof(char *));</div>
<div>-<span class="" style="white-space:pre">        </span>vim_memset(array, 0, size * sizeof(char *));</div><div>+<span class="" style="white-space:pre">        </span>array = (char **)alloc((size + 1) * sizeof(char *));</div><div>+<span class="" style="white-space:pre">        </span>vim_memset(array, 0, (size + 1) * sizeof(char *));</div>
<div> </div><div> <span class="" style="white-space:pre">        </span>rest = list;</div><div> <span class="" style="white-space:pre">        </span>for (i = 0; i &lt; size; ++i)</div></div><div><br></div><div class="gmail_extra"><br>
<br><div class="gmail_quote">On Fri, Dec 14, 2012 at 9:05 AM, Sergey Khorev <span dir="ltr">&lt;<a href="mailto:sergey.khorev@gmail.com" target="_blank">sergey.khorev@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br><div class="gmail_quote"><div class="im">On Fri, Dec 14, 2012 at 9:20 AM, Eric Dobson <span dir="ltr">&lt;<a href="mailto:eric.n.dobson@gmail.com" target="_blank">eric.n.dobson@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


I figured this out. It was that vim was not being compiled with the precise garbage collection when racket was, and a couple of bugs on the vim allocation of racket objects. I&#39;ll hopefully have a patch soon.<div>

<div><div class="gmail_extra"> </div></div></div></blockquote><div><br></div></div><div>Are you talking about official Vim source? For <a href="http://code.google.com/r/sergeykhorev-vim-mzscheme/source" target="_blank">http://code.google.com/r/sergeykhorev-vim-mzscheme/source</a> I reworked some memory allocation stuff so something must have changed in this regard :) </div>


</div>
<br>_________________________<br>
  Racket Developers list:<br>
  <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/dev</a><br>
<br></blockquote></div><br></div>