… | |
… | |
76 | |
76 | |
77 | if (i == ht.end ()) |
77 | if (i == ht.end ()) |
78 | i = ht.begin (); |
78 | i = ht.begin (); |
79 | |
79 | |
80 | // go through all strings roughly once every 4 minutes |
80 | // go through all strings roughly once every 4 minutes |
81 | int n = ht.size () / 256 + 16000; |
81 | int n = ht.size () / 256 + 16; |
82 | |
82 | |
83 | for (;;) |
83 | for (;;) |
84 | { |
84 | { |
85 | if (i == ht.end ()) |
85 | if (i == ht.end ()) |
86 | { |
86 | { |
… | |
… | |
92 | else if (!refcnt (*i)) |
92 | else if (!refcnt (*i)) |
93 | { |
93 | { |
94 | HT::iterator o = i++; |
94 | HT::iterator o = i++; |
95 | const char *s = *o; |
95 | const char *s = *o; |
96 | ht.erase (o); |
96 | ht.erase (o); |
97 | |
|
|
98 | int len = length (s); |
|
|
99 | |
97 | |
100 | //printf ("GC %4d %3d %d >%s<%d\n", (int)ht.size (), n, shstr::refcnt (s), s, shstr::length (s)); |
98 | //printf ("GC %4d %3d %d >%s<%d\n", (int)ht.size (), n, shstr::refcnt (s), s, shstr::length (s)); |
101 | g_slice_free1 (sizeof (int) * 2 + length (s) + 1, -2 + (int *)s); |
99 | g_slice_free1 (sizeof (int) * 2 + length (s) + 1, -2 + (int *)s); |
102 | } |
100 | } |
103 | else |
101 | else |