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 "X$vi_cv_path_mzscheme_pfx" != "X"; then</div>
<div>     if test "x$MACOSX" = "xyes"; then</div><div>-      MZSCHEME_LIBS="-framework PLT_MzScheme"</div><div>+      MZSCHEME_LIBS="-framework Racket"</div><div>+      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"</div>
<div>     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then</div><div>       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"</div><div>       MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"</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->buf->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->win->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->w_mzscheme_ref != NULL)</div><div> <span class="" style="white-space:pre">        </span>return win->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't visible to GC */</div>
<div>     MZ_GC_CHECK();</div><div>@@ -1977,7 +1979,7 @@</div><div>     if (buf->b_mzscheme_ref)</div><div> <span class="" style="white-space:pre">        </span>return buf->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'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 < 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 < 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"><<a href="mailto:sergey.khorev@gmail.com" target="_blank">sergey.khorev@gmail.com</a>></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"><<a href="mailto:eric.n.dobson@gmail.com" target="_blank">eric.n.dobson@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 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'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>