Loading ...
Sorry, an error occurred while loading the content.

54372Patch 7.2.192

Expand Messages
  • Bram Moolenaar
    Jun 3, 2009
    • 0 Attachment
      Patch 7.2.192 (after 7.2.188)
      Problem: Still a crash in the garbage collector for a very rare situation.
      Solution: Make sure current_copyID is always incremented correctly. (Kent
      Sibilev)
      Files: src/eval.c


      *** ../vim-7.2.191/src/eval.c 2009-05-26 22:58:43.000000000 +0200
      --- src/eval.c 2009-05-29 21:13:47.000000000 +0200
      ***************
      *** 6526,6532 ****

      /* Don't free variables in the previous_funccal list unless they are only
      * referenced through previous_funccal. This must be first, because if
      ! * the item is referenced elsewhere it must not be freed. */
      for (fc = previous_funccal; fc != NULL; fc = fc->caller)
      {
      set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1);
      --- 6526,6532 ----

      /* Don't free variables in the previous_funccal list unless they are only
      * referenced through previous_funccal. This must be first, because if
      ! * the item is referenced elsewhere the funccal must not be freed. */
      for (fc = previous_funccal; fc != NULL; fc = fc->caller)
      {
      set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1);
      ***************
      *** 6564,6573 ****
      /* v: vars */
      set_ref_in_ht(&vimvarht, copyID);

      ! /* Free lists and dictionaries that are not referenced. */
      did_free = free_unref_items(copyID);

      ! /* check if any funccal can be freed now */
      for (pfc = &previous_funccal; *pfc != NULL; )
      {
      if (can_free_funccal(*pfc, copyID))
      --- 6564,6577 ----
      /* v: vars */
      set_ref_in_ht(&vimvarht, copyID);

      ! /*
      ! * 2. Free lists and dictionaries that are not referenced.
      ! */
      did_free = free_unref_items(copyID);

      ! /*
      ! * 3. Check if any funccal can be freed now.
      ! */
      for (pfc = &previous_funccal; *pfc != NULL; )
      {
      if (can_free_funccal(*pfc, copyID))
      ***************
      *** 9286,9292 ****
      if (noref < 0 || noref > 1)
      EMSG(_(e_invarg));
      else
      ! item_copy(&argvars[0], rettv, TRUE, noref == 0 ? ++current_copyID : 0);
      }

      /*
      --- 9290,9299 ----
      if (noref < 0 || noref > 1)
      EMSG(_(e_invarg));
      else
      ! {
      ! current_copyID += COPYID_INC;
      ! item_copy(&argvars[0], rettv, TRUE, noref == 0 ? current_copyID : 0);
      ! }
      }

      /*
      ***************
      *** 18966,18972 ****
      char_u *s;
      char_u numbuf[NUMBUFLEN];

      ! s = echo_string(&v->di_tv, &tofree, numbuf, ++current_copyID);
      list_one_var_a(prefix, v->di_key, v->di_tv.v_type,
      s == NULL ? (char_u *)"" : s, first);
      vim_free(tofree);
      --- 18973,18980 ----
      char_u *s;
      char_u numbuf[NUMBUFLEN];

      ! current_copyID += COPYID_INC;
      ! s = echo_string(&v->di_tv, &tofree, numbuf, current_copyID);
      list_one_var_a(prefix, v->di_key, v->di_tv.v_type,
      s == NULL ? (char_u *)"" : s, first);
      vim_free(tofree);
      ***************
      *** 19401,19407 ****
      }
      else if (eap->cmdidx == CMD_echo)
      msg_puts_attr((char_u *)" ", echo_attr);
      ! p = echo_string(&rettv, &tofree, numbuf, ++current_copyID);
      if (p != NULL)
      for ( ; *p != NUL && !got_int; ++p)
      {
      --- 19409,19416 ----
      }
      else if (eap->cmdidx == CMD_echo)
      msg_puts_attr((char_u *)" ", echo_attr);
      ! current_copyID += COPYID_INC;
      ! p = echo_string(&rettv, &tofree, numbuf, current_copyID);
      if (p != NULL)
      for ( ; *p != NUL && !got_int; ++p)
      {
      *** ../vim-7.2.191/src/version.c 2009-05-26 22:58:43.000000000 +0200
      --- src/version.c 2009-06-03 13:21:20.000000000 +0200
      ***************
      *** 678,679 ****
      --- 678,681 ----
      { /* Add new patch number below this line */
      + /**/
      + 192,
      /**/

      --
      Imagine a world without hypothetical situations.

      /// Bram Moolenaar -- Bram@... -- http://www.Moolenaar.net \\\
      /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
      \\\ download, build and distribute -- http://www.A-A-P.org ///
      \\\ help me help AIDS victims -- http://ICCF-Holland.org ///

      --~--~---------~--~----~------------~-------~--~----~
      You received this message from the "vim_dev" maillist.
      For more information, visit http://www.vim.org/maillist.php
      -~----------~----~----~----~------~----~------~--~---