[libpinyin/f15] fixes memory leak
Peng Wu
pwu at fedoraproject.org
Mon Oct 31 04:40:48 UTC 2011
commit a5c163cf4d5ed64325048f4b3e54d61382bde4a5
Author: Peng Wu <alexepico at gmail.com>
Date: Mon Oct 31 12:35:26 2011 +0800
fixes memory leak
libpinyin-0.3.x-head.patch | 127 ++++++++++++++++++++++++++++++++++++++++++-
libpinyin.spec | 5 ++-
2 files changed, 128 insertions(+), 4 deletions(-)
---
diff --git a/libpinyin-0.3.x-head.patch b/libpinyin-0.3.x-head.patch
index b728db3..d00b387 100644
--- a/libpinyin-0.3.x-head.patch
+++ b/libpinyin-0.3.x-head.patch
@@ -1,7 +1,7 @@
From 127a5ce640ec5282bbb4b473c01c5366e3c5e2f2 Mon Sep 17 00:00:00 2001
From: Peng Wu <alexepico at gmail.com>
Date: Tue, 11 Oct 2011 14:56:23 +0800
-Subject: [PATCH 1/3] fixes fsf address
+Subject: [PATCH 1/4] fixes fsf address
---
src/include/memory_chunk.h | 2 +-
@@ -769,7 +769,7 @@ index 5fc7031..b9b864c 100644
From 6df832baaa4c06bcffed93620edf5431ee9249fc Mon Sep 17 00:00:00 2001
From: Peng Wu <alexepico at gmail.com>
Date: Wed, 26 Oct 2011 10:22:44 +0800
-Subject: [PATCH 2/3] add m_modified
+Subject: [PATCH 2/4] add m_modified
---
src/pinyin.cpp | 14 ++++++++++----
@@ -851,7 +851,7 @@ index c8eff79..46269e1 100644
From cdd9f5355a24f59f3aa587842d5b0a7e9fce4394 Mon Sep 17 00:00:00 2001
From: Peng Wu <alexepico at gmail.com>
Date: Thu, 27 Oct 2011 14:37:43 +0800
-Subject: [PATCH 3/3] fixes load_db
+Subject: [PATCH 3/4] fixes load_db
---
src/storage/ngram.cpp | 16 +++++++++-------
@@ -894,3 +894,124 @@ index 17c7e9b..fedd744 100644
--
1.7.6.4
+
+From 81ca3def70f06419f90c8db0246fad614ec9d11a Mon Sep 17 00:00:00 2001
+From: Peng Wu <alexepico at gmail.com>
+Date: Thu, 27 Oct 2011 18:05:44 +0800
+Subject: [PATCH 4/4] fixes save_db
+
+---
+ src/pinyin.cpp | 15 +++++++++++++++
+ src/storage/ngram.cpp | 3 ++-
+ 2 files changed, 17 insertions(+), 1 deletions(-)
+
+diff --git a/src/pinyin.cpp b/src/pinyin.cpp
+index 46269e1..8832321 100644
+--- a/src/pinyin.cpp
++++ b/src/pinyin.cpp
+@@ -63,6 +63,7 @@ pinyin_context_t * pinyin_init(const char * systemdir, const char * userdir){
+ fprintf(stderr, "open %s failed!\n", filename);
+ return NULL;
+ }
++ g_free(filename);
+ context->m_pinyin_table->load(chunk);
+
+ context->m_validator.initialize(context->m_pinyin_table);
+@@ -77,6 +78,7 @@ pinyin_context_t * pinyin_init(const char * systemdir, const char * userdir){
+ fprintf(stderr, "open %s failed!\n", filename);
+ return NULL;
+ }
++ g_free(filename);
+ context->m_phrase_table->load(chunk);
+
+ context->m_phrase_index = new FacadePhraseIndex;
+@@ -86,9 +88,11 @@ pinyin_context_t * pinyin_init(const char * systemdir, const char * userdir){
+ fprintf(stderr, "open %s failed!\n", filename);
+ return NULL;
+ }
++ g_free(filename);
+ context->m_phrase_index->load(1, chunk);
+ filename = g_build_filename(context->m_user_dir, "gb_char.dbin", NULL);
+ log->load(filename);
++ g_free(filename);
+ context->m_phrase_index->merge(1, log);
+
+ log = new MemoryChunk; chunk = new MemoryChunk;
+@@ -97,17 +101,22 @@ pinyin_context_t * pinyin_init(const char * systemdir, const char * userdir){
+ fprintf(stderr, "open %s failed!\n", filename);
+ return NULL;
+ }
++ g_free(filename);
+ context->m_phrase_index->load(2, chunk);
+ filename = g_build_filename(context->m_user_dir, "gbk_char.dbin", NULL);
+ log->load(filename);
++ g_free(filename);
+ context->m_phrase_index->merge(2, log);
+
+ context->m_system_bigram = new Bigram;
+ filename = g_build_filename(context->m_system_dir, "bigram.db", NULL);
+ context->m_system_bigram->attach(filename, ATTACH_READONLY);
++ g_free(filename);
++
+ context->m_user_bigram = new Bigram;
+ filename = g_build_filename(context->m_user_dir, "user.db", NULL);
+ context->m_user_bigram->load_db(filename);
++ g_free(filename);
+
+ context->m_pinyin_lookup = new PinyinLookup
+ ( &(context->m_custom), context->m_pinyin_table,
+@@ -134,24 +143,30 @@ bool pinyin_save(pinyin_context_t * context){
+ gchar * filename = g_build_filename(context->m_system_dir,
+ "gb_char.bin", NULL);
+ oldchunk->load(filename);
++ g_free(filename);
+ context->m_phrase_index->diff(1, oldchunk, newlog);
+ filename = g_build_filename(context->m_user_dir,
+ "gb_char.dbin", NULL);
+ newlog->save(filename);
++ g_free(filename);
+ delete newlog;
+
+ oldchunk = new MemoryChunk; newlog = new MemoryChunk;
+ filename = g_build_filename(context->m_system_dir,
+ "gbk_char.bin", NULL);
+ oldchunk->load(filename);
++ g_free(filename);
++
+ context->m_phrase_index->diff(2, oldchunk, newlog);
+ filename = g_build_filename(context->m_user_dir,
+ "gbk_char.dbin", NULL);
+ newlog->save(filename);
++ g_free(filename);
+ delete newlog;
+
+ filename = g_build_filename(context->m_user_dir, "user.db", NULL);
+ context->m_user_bigram->save_db(filename);
++ g_free(filename);
+
+ context->m_modified = false;
+ return true;
+diff --git a/src/storage/ngram.cpp b/src/storage/ngram.cpp
+index fedd744..f7dd347 100644
+--- a/src/storage/ngram.cpp
++++ b/src/storage/ngram.cpp
+@@ -20,6 +20,7 @@
+ */
+
+ #include <stdio.h>
++#include <errno.h>
+ #include <glib.h>
+ #include <glib/gstdio.h>
+ #include "memory_chunk.h"
+@@ -273,7 +274,7 @@ bool Bigram::save_db(const char * dbfile){
+ DB * tmp_db = NULL;
+
+ int ret = g_unlink(dbfile);
+- if ( ret != 0 )
++ if ( ret != 0 && errno != ENOENT)
+ return false;
+
+ ret = db_create(&tmp_db, NULL, 0);
+--
+1.7.6.4
+
diff --git a/libpinyin.spec b/libpinyin.spec
index 01b147f..eb00a50 100644
--- a/libpinyin.spec
+++ b/libpinyin.spec
@@ -1,6 +1,6 @@
Name: libpinyin
Version: 0.2.99.2
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Library to deal with pinyin
License: GPLv2+
@@ -70,6 +70,9 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%{_datadir}/libpinyin/data
%changelog
+* Mon Oct 31 2011 Peng Wu <pwu at redhat.com> - 0.2.99.2-5
+- Fixes memory leak and save_db
+
* Thu Oct 27 2011 Peng Wu <pwu at redhat.com> - 0.2.99.2-4
- Update libpinyin-0.3.x-head.patch
More information about the scm-commits
mailing list