--- evolution-data-server-1.9.1/camel/camel-text-index.c.kill-ememory 2006-10-25 23:02:26.000000000 -0400 +++ evolution-data-server-1.9.1/camel/camel-text-index.c 2006-10-25 23:03:35.000000000 -0400 @@ -70,7 +70,7 @@ struct _CamelTextIndexNamePrivate { GString *buffer; camel_key_t nameid; - EMemPool *pool; + GStringChunk *string_chunk; }; CamelTextIndexName *camel_text_index_name_new(CamelTextIndex *idx, const char *name, camel_key_t nameid); @@ -1373,7 +1373,7 @@ struct _CamelTextIndexNamePrivate *p = ((CamelTextIndexName *)idn)->priv; if (g_hash_table_lookup(idn->words, word) == NULL) { - char *w = e_mempool_strdup(p->pool, word); + char *w = g_string_chunk_insert(p->string_chunk, word); g_hash_table_insert(idn->words, w, w); } @@ -1501,7 +1501,7 @@ p = idn->priv = g_malloc0(sizeof(*idn->priv)); p->buffer = g_string_new(""); - p->pool = e_mempool_new(256, 128, E_MEMPOOL_ALIGN_BYTE); + p->string_chunk = g_string_chunk_new(256); } static void @@ -1512,7 +1512,7 @@ g_hash_table_destroy(idn->parent.words); g_string_free(p->buffer, TRUE); - e_mempool_destroy(p->pool); + g_string_chunk_free(p->string_chunk); g_free(p); } @@ -1544,7 +1544,7 @@ cin->index = (CamelIndex *)idx; camel_object_ref((CamelObject *)idx); - cin->name = e_mempool_strdup(p->pool, name); + cin->name = g_string_chunk_insert(p->string_chunk, name); p->nameid = nameid; return idn; --- evolution-data-server-1.9.1/camel/camel-mime-parser.c.kill-ememory 2006-04-12 15:14:13.000000000 -0400 +++ evolution-data-server-1.9.1/camel/camel-mime-parser.c 2006-10-25 23:03:35.000000000 -0400 @@ -122,7 +122,7 @@ camel_mime_parser_state_t savestate; /* state at invocation of this part */ #ifdef MEMPOOL - EMemPool *pool; /* memory pool to keep track of headers/etc at this level */ + GStringChunk *string_chunk; /* string chunk to keep track of headers/etc at this level */ #endif struct _camel_header_raw *headers; /* headers for this part */ @@ -1001,7 +1001,8 @@ s->parts = h->parent; g_free(h->boundary); #ifdef MEMPOOL - e_mempool_destroy(h->pool); + if (h->string_chunk != NULL) + g_string_chunk_free(h->string_chunk); #else camel_header_raw_clear(&h->headers); #endif @@ -1109,20 +1110,16 @@ content = strchr(header, ':'); if (content) { register int len; - n = e_mempool_alloc(h->pool, sizeof(*n)); + n = g_malloc(sizeof(*n)); n->next = NULL; len = content-header; - n->name = e_mempool_alloc(h->pool, len+1); - memcpy(n->name, header, len); - n->name[len] = 0; + n->name = g_string_chunk_insert_len(h->string_chunk, header, len); content++; len = s->outptr - content; - n->value = e_mempool_alloc(h->pool, len+1); - memcpy(n->value, content, len); - n->value[len] = 0; + n->value = g_string_chunk_insert_len(h->string_chunk, content, len); n->offset = offset; @@ -1180,7 +1177,7 @@ h = g_malloc0(sizeof(*h)); #ifdef MEMPOOL - h->pool = e_mempool_new(8192, 4096, E_MEMPOOL_ALIGN_STRUCT); + h->string_chunk = g_string_chunk_new(8192); #endif if (s->parts) --- evolution-data-server-1.9.1/camel/camel-vee-folder.c.kill-ememory 2006-04-12 15:14:13.000000000 -0400 +++ evolution-data-server-1.9.1/camel/camel-vee-folder.c 2006-10-25 23:03:35.000000000 -0400 @@ -28,10 +28,6 @@ #include "libedataserver/md5-utils.h" -#if defined (DOEPOOLV) || defined (DOESTRV) -#include "libedataserver/e-memory.h" -#endif - #include "camel-debug.h" #include "camel-exception.h" #include "camel-folder-search.h" --- evolution-data-server-1.9.1/camel/camel-folder.c.kill-ememory 2006-10-25 23:02:26.000000000 -0400 +++ evolution-data-server-1.9.1/camel/camel-folder.c 2006-10-25 23:03:35.000000000 -0400 @@ -1890,7 +1890,7 @@ struct _CamelFolderChangeInfoPrivate { GHashTable *uid_stored; /* what we have stored, which array they're in */ GHashTable *uid_source; /* used to create unique lists */ - struct _EMemPool *uid_pool; /* pool used to store copies of uid strings */ + GStringChunk *uid_string_chunk; /* used to store copies of uid strings */ }; @@ -1917,7 +1917,7 @@ info->priv = g_malloc0(sizeof(*info->priv)); info->priv->uid_stored = g_hash_table_new(g_str_hash, g_str_equal); info->priv->uid_source = NULL; - info->priv->uid_pool = e_mempool_new(512, 256, E_MEMPOOL_ALIGN_BYTE); + info->priv->uid_string_chunk = g_string_chunk_new(512); return info; } @@ -1943,7 +1943,7 @@ p->uid_source = g_hash_table_new(g_str_hash, g_str_equal); if (g_hash_table_lookup(p->uid_source, uid) == NULL) - g_hash_table_insert(p->uid_source, e_mempool_strdup(p->uid_pool, uid), GINT_TO_POINTER (1)); + g_hash_table_insert(p->uid_source, g_string_chunk_insert(p->uid_string_chunk, uid), GINT_TO_POINTER (1)); } @@ -1972,7 +1972,7 @@ char *uid = list->pdata[i]; if (g_hash_table_lookup(p->uid_source, uid) == NULL) - g_hash_table_insert(p->uid_source, e_mempool_strdup(p->uid_pool, uid), GINT_TO_POINTER (1)); + g_hash_table_insert(p->uid_source, g_string_chunk_insert(p->uid_string_chunk, uid), GINT_TO_POINTER (1)); } } @@ -2132,7 +2132,7 @@ return; } - olduid = e_mempool_strdup(p->uid_pool, uid); + olduid = g_string_chunk_insert(p->uid_string_chunk, uid); g_ptr_array_add(info->uid_added, olduid); g_hash_table_insert(p->uid_stored, olduid, info->uid_added); } @@ -2166,7 +2166,7 @@ return; } - olduid = e_mempool_strdup(p->uid_pool, uid); + olduid = g_string_chunk_insert(p->uid_string_chunk, uid); g_ptr_array_add(info->uid_removed, olduid); g_hash_table_insert(p->uid_stored, olduid, info->uid_removed); } @@ -2195,7 +2195,7 @@ return; } - olduid = e_mempool_strdup(p->uid_pool, uid); + olduid = g_string_chunk_insert(p->uid_string_chunk, uid); g_ptr_array_add(info->uid_changed, olduid); g_hash_table_insert(p->uid_stored, olduid, info->uid_changed); } @@ -2221,7 +2221,7 @@ /* always add to recent, but dont let anyone else know */ if (!g_hash_table_lookup_extended(p->uid_stored, uid, (void **)&olduid, (void **)&olduids)) { - olduid = e_mempool_strdup(p->uid_pool, uid); + olduid = g_string_chunk_insert(p->uid_string_chunk, uid); } g_ptr_array_add(info->uid_recent, olduid); } @@ -2270,7 +2270,8 @@ } g_hash_table_destroy(p->uid_stored); p->uid_stored = g_hash_table_new(g_str_hash, g_str_equal); - e_mempool_flush(p->uid_pool, TRUE); + g_string_chunk_free(p->uid_string_chunk); + p->uid_string_chunk = g_string_chunk_new(512); } @@ -2293,7 +2294,7 @@ g_hash_table_destroy(p->uid_source); g_hash_table_destroy(p->uid_stored); - e_mempool_destroy(p->uid_pool); + g_string_chunk_free(p->uid_string_chunk); g_free(p); g_ptr_array_free(info->uid_added, TRUE); --- evolution-data-server-1.9.1/camel/camel-folder-summary.c.kill-ememory 2006-07-24 09:40:46.000000000 -0400 +++ evolution-data-server-1.9.1/camel/camel-folder-summary.c 2006-10-25 23:03:35.000000000 -0400 @@ -134,10 +134,6 @@ s->message_info_chunks = NULL; s->content_info_chunks = NULL; -#if defined (DOESTRV) || defined (DOEPOOLV) - s->message_info_strings = CAMEL_MESSAGE_INFO_LAST; -#endif - s->version = CAMEL_FOLDER_SUMMARY_VERSION; s->flags = 0; s->time = 0; @@ -873,13 +869,6 @@ CAMEL_SUMMARY_LOCK(s, summary_lock); -/* unnecessary for pooled vectors */ -#ifdef DOESTRV - /* this is vitally important, and also if this is ever modified, then - the hash table needs to be resynced */ - info->strings = e_strv_pack(info->strings); -#endif - g_ptr_array_add(s->messages, info); g_hash_table_insert(s->messages_uid, (char *)camel_message_info_uid(info), info); s->flags |= CAMEL_SUMMARY_DIRTY; --- evolution-data-server-1.9.1/camel/providers/local/camel-maildir-summary.c.kill-ememory 2005-08-31 00:26:06.000000000 -0400 +++ evolution-data-server-1.9.1/camel/providers/local/camel-maildir-summary.c 2006-10-25 23:03:35.000000000 -0400 @@ -129,10 +129,6 @@ s->message_info_size = sizeof(CamelMaildirMessageInfo); s->content_info_size = sizeof(CamelMaildirMessageContentInfo); -#if defined (DOEPOOLV) || defined (DOESTRV) - s->message_info_strings = CAMEL_MAILDIR_INFO_LAST; -#endif - if (gethostname(hostname, 256) == 0) { o->priv->hostname = g_strdup(hostname); } else { @@ -329,11 +325,9 @@ static void message_info_free(CamelFolderSummary *s, CamelMessageInfo *mi) { -#if !defined (DOEPOOLV) && !defined (DOESTRV) CamelMaildirMessageInfo *mdi = (CamelMaildirMessageInfo *)mi; g_free(mdi->filename); -#endif ((CamelFolderSummaryClass *) parent_class)->message_info_free(s, mi); } @@ -412,7 +406,7 @@ struct dirent *d; CamelMaildirSummary *mds = (CamelMaildirSummary *)cls; char *uid; - EMemPool *pool; + GStringChunk *string_chunk; int ret; cur = g_strdup_printf("%s/cur", cls->folder_path); @@ -429,7 +423,7 @@ } mds->priv->load_map = g_hash_table_new(g_str_hash, g_str_equal); - pool = e_mempool_new(1024, 512, E_MEMPOOL_ALIGN_BYTE); + string_chunk = g_string_chunk_new(1024); while ( (d = readdir(dir)) ) { if (d->d_name[0] == '.') @@ -438,13 +432,13 @@ /* map the filename -> uid */ uid = strchr(d->d_name, ':'); if (uid) { - int len = uid-d->d_name; - uid = e_mempool_alloc(pool, len+1); - memcpy(uid, d->d_name, len); - uid[len] = 0; - g_hash_table_insert(mds->priv->load_map, uid, e_mempool_strdup(pool, d->d_name)); + char *cp = uid; + *cp = '\0'; + uid = g_string_chunk_insert(string_chunk, uid); + *cp = ':'; + g_hash_table_insert(mds->priv->load_map, uid, g_string_chunk_insert(string_chunk, d->d_name)); } else { - uid = e_mempool_strdup(pool, d->d_name); + uid = g_string_chunk_insert(string_chunk, d->d_name); g_hash_table_insert(mds->priv->load_map, uid, uid); } } @@ -455,7 +449,7 @@ g_hash_table_destroy(mds->priv->load_map); mds->priv->load_map = NULL; - e_mempool_destroy(pool); + g_string_chunk_free(string_chunk); return ret; } @@ -621,23 +615,8 @@ filename = camel_maildir_info_filename(mdi); /* TODO: only store the extension in the mdi->filename struct, not the whole lot */ if (filename == NULL || strcmp(filename, d->d_name) != 0) { -#ifdef DOESTRV -#warning "cannot modify the estrv after its been setup, for mt-safe code" - CAMEL_SUMMARY_LOCK(s, summary_lock); - /* need to update the summary hash ref */ - g_hash_table_remove(s->messages_uid, camel_message_info_uid(info)); - info->strings = e_strv_set_ref(info->strings, CAMEL_MAILDIR_INFO_FILENAME, d->d_name); - info->strings = e_strv_pack(info->strings); - g_hash_table_insert(s->messages_uid, (char *)camel_message_info_uid(info), info); - CAMEL_SUMMARY_UNLOCK(s, summary_lock); -#else -# ifdef DOEPOOLV - info->strings = e_poolv_set(info->strings, CAMEL_MAILDIR_INFO_FILENAME, d->d_name, FALSE); -# else g_free(mdi->filename); mdi->filename = g_strdup(d->d_name); -# endif -#endif } camel_message_info_free(info); } @@ -727,9 +706,6 @@ int count, i; CamelMessageInfo *info; CamelMaildirMessageInfo *mdi; -#ifdef DOESTRV - CamelFolderSummary *s = (CamelFolderSummary *)cls; -#endif char *name; struct stat st; @@ -775,26 +751,8 @@ /* we'll assume it didn't work, but dont change anything else */ g_free(newname); } else { - /* TODO: If this is made mt-safe, then this code could be a problem, since - the estrv is being modified. - Sigh, this may mean the maildir name has to be cached another way */ -#ifdef DOESTRV -#warning "cannot modify the estrv after its been setup, for mt-safe code" - CAMEL_SUMMARY_LOCK(s, summary_lock); - /* need to update the summary hash ref */ - g_hash_table_remove(s->messages_uid, camel_message_info_uid(info)); - info->strings = e_strv_set_ref_free(info->strings, CAMEL_MAILDIR_INFO_FILENAME, newname); - info->strings = e_strv_pack(info->strings); - g_hash_table_insert(s->messages_uid, (char *)camel_message_info_uid(info), info); - CAMEL_SUMMARY_UNLOCK(s, summary_lock); -#else -# ifdef DOEPOOLV - info->strings = e_poolv_set(info->strings, CAMEL_MAILDIR_INFO_FILENAME, newname, TRUE); -# else g_free(mdi->filename); mdi->filename = newname; -# endif -#endif } g_free(name); g_free(dest); --- evolution-data-server-1.9.1/camel/camel-folder-search.c.kill-ememory 2006-06-08 21:21:50.000000000 -0400 +++ evolution-data-server-1.9.1/camel/camel-folder-search.c 2006-10-25 23:03:35.000000000 -0400 @@ -52,7 +52,7 @@ #define r(x) struct _CamelFolderSearchPrivate { - GHashTable *mempool_hash; + GHashTable *string_chunk_hash; CamelException *ex; CamelFolderThread *threads; @@ -122,23 +122,23 @@ obj->sexp = e_sexp_new(); - /* use a hash of mempools to associate the returned uid lists with - the backing mempool. yes pretty weird, but i didn't want to change - the api just yet */ + /* use a hash of string chunks to associate the returned uid lists + * with the backing string chunk. yes pretty weird, but i didn't + * want to change the api just yet */ - p->mempool_hash = g_hash_table_new(0, 0); + p->string_chunk_hash = g_hash_table_new(0, 0); } static void -free_mempool(void *key, void *value, void *data) +free_string_chunk (void *key, void *value, void *data) { GPtrArray *uids = key; - EMemPool *pool = value; + GStringChunk *string_chunk = value; g_warning("Search closed with outstanding result unfreed: %p", uids); g_ptr_array_free(uids, TRUE); - e_mempool_destroy(pool); + g_string_chunk_free(string_chunk); } static void @@ -153,8 +153,8 @@ g_hash_table_destroy(search->summary_hash); g_free(search->last_search); - g_hash_table_foreach(p->mempool_hash, free_mempool, obj); - g_hash_table_destroy(p->mempool_hash); + g_hash_table_foreach(p->string_chunk_hash, free_string_chunk, obj); + g_hash_table_destroy(p->string_chunk_hash); g_free(p); } @@ -344,7 +344,7 @@ GPtrArray *matches; int i; GHashTable *results; - EMemPool *pool; + GStringChunk *string_chunk; struct _CamelFolderSearchPrivate *p = _PRIVATE(search); p->ex = ex; @@ -373,11 +373,7 @@ /* now create a folder summary to return?? */ if (r->type == ESEXP_RES_ARRAY_PTR) { d(printf("got result ...\n")); - /* we use a mempool to store the strings, packed in tight as possible, and freed together */ - /* because the strings are often short (like <8 bytes long), we would be wasting appx 50% - of memory just storing the size tag that malloc assigns us and alignment padding, so this - gets around that (and is faster to allocate and free as a bonus) */ - pool = e_mempool_new(512, 256, E_MEMPOOL_ALIGN_BYTE); + string_chunk = g_string_chunk_new(512); if (search->summary) { /* reorder result in summary order */ results = g_hash_table_new(g_str_hash, g_str_equal); @@ -389,20 +385,21 @@ CamelMessageInfo *info = g_ptr_array_index(search->summary, i); char *uid = (char *)camel_message_info_uid(info); if (g_hash_table_lookup(results, uid)) { - g_ptr_array_add(matches, e_mempool_strdup(pool, uid)); + g_ptr_array_add(matches, g_string_chunk_insert(string_chunk, uid)); } } g_hash_table_destroy(results); } else { for (i=0;ivalue.ptrarray->len;i++) { d(printf("adding match: %s\n", (char *)g_ptr_array_index(r->value.ptrarray, i))); - g_ptr_array_add(matches, e_mempool_strdup(pool, g_ptr_array_index(r->value.ptrarray, i))); + g_ptr_array_add(matches, g_string_chunk_insert(string_chunk, g_ptr_array_index(r->value.ptrarray, i))); } } - /* instead of putting the mempool_hash in the structure, we keep the api clean by - putting a reference to it in a hashtable. Lets us do some debugging and catch - unfree'd results as well. */ - g_hash_table_insert(p->mempool_hash, matches, pool); + /* instead of putting the string_chunk_hash in the structure, + * we keep the api clean by putting a reference to it in a + * hashtable. Lets us do some debugging and catch unfree'd + * results as well. */ + g_hash_table_insert(p->string_chunk_hash, matches, string_chunk); } else { g_warning("Search returned an invalid result type"); } @@ -443,7 +440,7 @@ GPtrArray *matches = NULL, *summary_set; int i; GHashTable *results; - EMemPool *pool; + GStringChunk *string_chunk; struct _CamelFolderSearchPrivate *p = _PRIVATE(search); g_assert(search->folder); @@ -495,12 +492,7 @@ /* now create a folder summary to return?? */ if (r->type == ESEXP_RES_ARRAY_PTR) { d(printf("got result ...\n")); - - /* we use a mempool to store the strings, packed in tight as possible, and freed together */ - /* because the strings are often short (like <8 bytes long), we would be wasting appx 50% - of memory just storing the size tag that malloc assigns us and alignment padding, so this - gets around that (and is faster to allocate and free as a bonus) */ - pool = e_mempool_new(512, 256, E_MEMPOOL_ALIGN_BYTE); + string_chunk = g_string_chunk_new(512); /* reorder result in summary order */ results = g_hash_table_new(g_str_hash, g_str_equal); for (i=0;ivalue.ptrarray->len;i++) { @@ -512,14 +504,15 @@ CamelMessageInfo *info = g_ptr_array_index(summary_set, i); char *uid = (char *)camel_message_info_uid(info); if (g_hash_table_lookup(results, uid)) - g_ptr_array_add(matches, e_mempool_strdup(pool, uid)); + g_ptr_array_add(matches, g_string_chunk_insert(string_chunk, uid)); } g_hash_table_destroy(results); - /* instead of putting the mempool_hash in the structure, we keep the api clean by - putting a reference to it in a hashtable. Lets us do some debugging and catch - unfree'd results as well. */ - g_hash_table_insert(p->mempool_hash, matches, pool); + /* instead of putting the string_chunk_hash in the structure, + * we keep the api clean by putting a reference to it in a + * hashtable. Lets us do some debugging and catch unfree'd + * results as well. */ + g_hash_table_insert(p->string_chunk_hash, matches, string_chunk); } else { g_warning("Search returned an invalid result type"); } @@ -552,12 +545,12 @@ { int i; struct _CamelFolderSearchPrivate *p = _PRIVATE(search); - EMemPool *pool; + GStringChunk *string_chunk; - pool = g_hash_table_lookup(p->mempool_hash, result); - if (pool) { - e_mempool_destroy(pool); - g_hash_table_remove(p->mempool_hash, result); + string_chunk = g_hash_table_lookup(p->string_chunk_hash, result); + if (string_chunk) { + g_string_chunk_free(string_chunk); + g_hash_table_remove(p->string_chunk_hash, result); } else { for (i=0;ilen;i++) g_free(g_ptr_array_index(result, i));