]> git.pld-linux.org Git - packages/vim.git/blob - 7.2.192
- new
[packages/vim.git] / 7.2.192
1 To: vim-dev@vim.org
2 Subject: Patch 7.2.192
3 Fcc: outbox
4 From: Bram Moolenaar <Bram@moolenaar.net>
5 Mime-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8 ------------
9
10 Patch 7.2.192 (after 7.2.188)
11 Problem:    Still a crash in the garbage collector for a very rare situation.
12 Solution:   Make sure current_copyID is always incremented correctly. (Kent
13             Sibilev)
14 Files:      src/eval.c
15
16
17 *** ../vim-7.2.191/src/eval.c   2009-05-26 22:58:43.000000000 +0200
18 --- src/eval.c  2009-05-29 21:13:47.000000000 +0200
19 ***************
20 *** 6526,6532 ****
21   
22       /* Don't free variables in the previous_funccal list unless they are only
23        * referenced through previous_funccal.  This must be first, because if
24 !      * the item is referenced elsewhere it must not be freed. */
25       for (fc = previous_funccal; fc != NULL; fc = fc->caller)
26       {
27         set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1);
28 --- 6526,6532 ----
29   
30       /* Don't free variables in the previous_funccal list unless they are only
31        * referenced through previous_funccal.  This must be first, because if
32 !      * the item is referenced elsewhere the funccal must not be freed. */
33       for (fc = previous_funccal; fc != NULL; fc = fc->caller)
34       {
35         set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1);
36 ***************
37 *** 6564,6573 ****
38       /* v: vars */
39       set_ref_in_ht(&vimvarht, copyID);
40   
41 !     /* Free lists and dictionaries that are not referenced. */
42       did_free = free_unref_items(copyID);
43   
44 !     /* check if any funccal can be freed now */
45       for (pfc = &previous_funccal; *pfc != NULL; )
46       {
47         if (can_free_funccal(*pfc, copyID))
48 --- 6564,6577 ----
49       /* v: vars */
50       set_ref_in_ht(&vimvarht, copyID);
51   
52 !     /*
53 !      * 2. Free lists and dictionaries that are not referenced.
54 !      */
55       did_free = free_unref_items(copyID);
56   
57 !     /*
58 !      * 3. Check if any funccal can be freed now.
59 !      */
60       for (pfc = &previous_funccal; *pfc != NULL; )
61       {
62         if (can_free_funccal(*pfc, copyID))
63 ***************
64 *** 9286,9292 ****
65       if (noref < 0 || noref > 1)
66         EMSG(_(e_invarg));
67       else
68 !       item_copy(&argvars[0], rettv, TRUE, noref == 0 ? ++current_copyID : 0);
69   }
70   
71   /*
72 --- 9290,9299 ----
73       if (noref < 0 || noref > 1)
74         EMSG(_(e_invarg));
75       else
76 !     {
77 !       current_copyID += COPYID_INC;
78 !       item_copy(&argvars[0], rettv, TRUE, noref == 0 ? current_copyID : 0);
79 !     }
80   }
81   
82   /*
83 ***************
84 *** 18966,18972 ****
85       char_u    *s;
86       char_u    numbuf[NUMBUFLEN];
87   
88 !     s = echo_string(&v->di_tv, &tofree, numbuf, ++current_copyID);
89       list_one_var_a(prefix, v->di_key, v->di_tv.v_type,
90                                          s == NULL ? (char_u *)"" : s, first);
91       vim_free(tofree);
92 --- 18973,18980 ----
93       char_u    *s;
94       char_u    numbuf[NUMBUFLEN];
95   
96 !     current_copyID += COPYID_INC;
97 !     s = echo_string(&v->di_tv, &tofree, numbuf, current_copyID);
98       list_one_var_a(prefix, v->di_key, v->di_tv.v_type,
99                                          s == NULL ? (char_u *)"" : s, first);
100       vim_free(tofree);
101 ***************
102 *** 19401,19407 ****
103             }
104             else if (eap->cmdidx == CMD_echo)
105                 msg_puts_attr((char_u *)" ", echo_attr);
106 !           p = echo_string(&rettv, &tofree, numbuf, ++current_copyID);
107             if (p != NULL)
108                 for ( ; *p != NUL && !got_int; ++p)
109                 {
110 --- 19409,19416 ----
111             }
112             else if (eap->cmdidx == CMD_echo)
113                 msg_puts_attr((char_u *)" ", echo_attr);
114 !           current_copyID += COPYID_INC;
115 !           p = echo_string(&rettv, &tofree, numbuf, current_copyID);
116             if (p != NULL)
117                 for ( ; *p != NUL && !got_int; ++p)
118                 {
119 *** ../vim-7.2.191/src/version.c        2009-05-26 22:58:43.000000000 +0200
120 --- src/version.c       2009-06-03 13:21:20.000000000 +0200
121 ***************
122 *** 678,679 ****
123 --- 678,681 ----
124   {   /* Add new patch number below this line */
125 + /**/
126 +     192,
127   /**/
128
129 -- 
130 Imagine a world without hypothetical situations.
131
132  /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
133 ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
134 \\\        download, build and distribute -- http://www.A-A-P.org        ///
135  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
This page took 0.071973 seconds and 3 git commands to generate.