[balsa] mime-stream-shared: Use modern macros
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa] mime-stream-shared: Use modern macros
- Date: Tue, 16 Jul 2019 15:24:13 +0000 (UTC)
commit 6815dbc23bc08e5d51c75e177bbf0dfe39372195
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Tue Jul 16 10:45:27 2019 -0400
mime-stream-shared: Use modern macros
Use modern macros to declare and define LibBalsaMimeStreamShared.
* libbalsa/mime-stream-shared.c: Use G_DEFINE_TYPE();
(libbalsa_mime_stream_shared_class_init): do not handle
parent_class;
(libbalsa_mime_stream_shared_init): new stub, required by
G_DEFINE_TYPE();
(lbmss_lock_new): do not ref-count locks;
(lbmss_finalize): use GMimeStreamFs::owner to decide when to
free the lock;
(lbmss_stream_read), (lbmss_stream_write),
(lbmss_stream_reset), (lbmss_stream_seek),
(lbmss_stream_substream), (libbalsa_mime_stream_shared_new):
parent class stuff;
(libbalsa_mime_stream_shared_lock),
(libbalsa_mime_stream_shared_unlock): cosmetics;
* libbalsa/mime-stream-shared.h: Use G_DECLARE_FINAL_TYPE().
ChangeLog | 20 +++++++
libbalsa/mime-stream-shared.c | 122 +++++++++++++-----------------------------
libbalsa/mime-stream-shared.h | 34 ++++--------
3 files changed, 67 insertions(+), 109 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index b0d9afee2..d036bb180 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2019-07-16 Peter Bloomfield <pbloomfield bellsouth net>
+
+ mime-stream-shared: Use modern macros to declare and define.
+
+ * libbalsa/mime-stream-shared.c: Use G_DEFINE_TYPE();
+ (libbalsa_mime_stream_shared_class_init): do not handle
+ parent_class;
+ (libbalsa_mime_stream_shared_init): new stub, required by
+ G_DEFINE_TYPE();
+ (lbmss_lock_new): do not ref-count locks;
+ (lbmss_finalize): use GMimeStreamFs::owner to decide when to
+ free the lock;
+ (lbmss_stream_read), (lbmss_stream_write),
+ (lbmss_stream_reset), (lbmss_stream_seek),
+ (lbmss_stream_substream), (libbalsa_mime_stream_shared_new):
+ parent class stuff;
+ (libbalsa_mime_stream_shared_lock),
+ (libbalsa_mime_stream_shared_unlock): cosmetics;
+ * libbalsa/mime-stream-shared.h: Use G_DECLARE_FINAL_TYPE().
+
2019-07-15 Peter Bloomfield <pbloomfield bellsouth net>
Fix some Valgrind-detected issues
diff --git a/libbalsa/mime-stream-shared.c b/libbalsa/mime-stream-shared.c
index f17308284..d3ce57571 100644
--- a/libbalsa/mime-stream-shared.c
+++ b/libbalsa/mime-stream-shared.c
@@ -48,12 +48,6 @@ struct _LibBalsaMimeStreamShared {
LibBalsaMimeStreamSharedLock *lock;
};
-struct _LibBalsaMimeStreamSharedClass {
- GMimeStreamClass parent_class;
-};
-
-static void lbmss_stream_class_init(LibBalsaMimeStreamSharedClass * klass);
-
static void lbmss_finalize(GObject *object);
static ssize_t lbmss_stream_read(GMimeStream * stream, char *buf,
@@ -66,44 +60,17 @@ static gint64 lbmss_stream_seek(GMimeStream * stream, gint64 offset,
static GMimeStream *lbmss_stream_substream(GMimeStream * stream,
gint64 start, gint64 end);
-static GMimeStreamFsClass *parent_class = NULL;
static GMutex lbmss_mutex;
static GCond lbmss_cond;
-GType
-libbalsa_mime_stream_shared_get_type(void)
-{
- static GType type = 0;
-
- if (!type) {
- static const GTypeInfo info = {
- sizeof(LibBalsaMimeStreamSharedClass),
- NULL, /* base_class_init */
- NULL, /* base_class_finalize */
- (GClassInitFunc) lbmss_stream_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof(LibBalsaMimeStreamShared),
- 16, /* n_preallocs */
- NULL /* instance init */
- };
-
- type =
- g_type_register_static(GMIME_TYPE_STREAM_FS,
- "LibBalsaMimeStreamShared", &info, 0);
- }
-
- return type;
-}
+G_DEFINE_TYPE(LibBalsaMimeStreamShared, libbalsa_mime_stream_shared, GMIME_TYPE_STREAM_FS)
static void
-lbmss_stream_class_init(LibBalsaMimeStreamSharedClass * klass)
+libbalsa_mime_stream_shared_class_init(LibBalsaMimeStreamSharedClass * klass)
{
GMimeStreamClass *stream_class = GMIME_STREAM_CLASS(klass);
GObjectClass *object_class = G_OBJECT_CLASS(klass);
- parent_class = g_type_class_ref(GMIME_TYPE_STREAM_FS);
-
object_class->finalize = lbmss_finalize;
stream_class->read = lbmss_stream_read;
@@ -113,12 +80,16 @@ lbmss_stream_class_init(LibBalsaMimeStreamSharedClass * klass)
stream_class->substream = lbmss_stream_substream;
}
+static void
+libbalsa_mime_stream_shared_init(LibBalsaMimeStreamShared * stream)
+{
+}
+
/* The shared lock. */
struct _LibBalsaMimeStreamSharedLock {
GThread *thread;
guint count;
- guint ref_count;
};
static LibBalsaMimeStreamSharedLock *
@@ -126,69 +97,51 @@ lbmss_lock_new(void)
{
LibBalsaMimeStreamSharedLock *lock;
- lock = g_new(LibBalsaMimeStreamSharedLock, 1);
- lock->thread = 0;
- lock->count = 0;
- lock->ref_count = 1;
+ lock = g_new(LibBalsaMimeStreamSharedLock, 1);
+ lock->thread = NULL;
+ lock->count = 0;
return lock;
}
-static LibBalsaMimeStreamSharedLock *
-lbmss_lock_ref(LibBalsaMimeStreamSharedLock * lock)
-{
- ++lock->ref_count;
-
- return lock;
-}
-
-static void
-lbmss_lock_unref(LibBalsaMimeStreamSharedLock * lock)
-{
- g_assert(lock->ref_count > 0);
-
- if (--lock->ref_count == 0)
- g_free(lock);
-}
-
/* Object class method. */
static void
lbmss_finalize(GObject *object)
{
- LibBalsaMimeStreamShared *stream_shared =
- (LibBalsaMimeStreamShared *) object;
+ LibBalsaMimeStreamShared *shared_stream = (LibBalsaMimeStreamShared *) object;
+ GMimeStreamFs *fs_stream = (GMimeStreamFs *) object;
- lbmss_lock_unref(stream_shared->lock);
+ if (fs_stream->owner)
+ g_free(shared_stream->lock);
- G_OBJECT_CLASS(parent_class)->finalize(object);
+ G_OBJECT_CLASS(libbalsa_mime_stream_shared_parent_class)->finalize(object);
}
/* Stream class methods. */
-#define lbmss_thread_has_lock(stream) \
- (LIBBALSA_MIME_STREAM_SHARED(stream)->lock->count > 0 \
- && LIBBALSA_MIME_STREAM_SHARED(stream)->lock->thread == g_thread_self())
+#define lbmss_thread_has_lock(stream) \
+ (LIBBALSA_MIME_STREAM_SHARED(stream)->lock->thread == g_thread_self())
static ssize_t
lbmss_stream_read(GMimeStream * stream, char *buf, size_t len)
{
g_return_val_if_fail(lbmss_thread_has_lock(stream), -1);
- return GMIME_STREAM_CLASS(parent_class)->read(stream, buf, len);
+ return GMIME_STREAM_CLASS(libbalsa_mime_stream_shared_parent_class)->read(stream, buf, len);
}
static ssize_t
lbmss_stream_write(GMimeStream * stream, const char *buf, size_t len)
{
g_return_val_if_fail(lbmss_thread_has_lock(stream), -1);
- return GMIME_STREAM_CLASS(parent_class)->write(stream, buf, len);
+ return GMIME_STREAM_CLASS(libbalsa_mime_stream_shared_parent_class)->write(stream, buf, len);
}
static int
lbmss_stream_reset(GMimeStream * stream)
{
g_return_val_if_fail(lbmss_thread_has_lock(stream), -1);
- return GMIME_STREAM_CLASS(parent_class)->reset(stream);
+ return GMIME_STREAM_CLASS(libbalsa_mime_stream_shared_parent_class)->reset(stream);
}
static gint64
@@ -196,21 +149,20 @@ lbmss_stream_seek(GMimeStream * stream, gint64 offset,
GMimeSeekWhence whence)
{
g_return_val_if_fail(lbmss_thread_has_lock(stream), -1);
- return GMIME_STREAM_CLASS(parent_class)->seek(stream, offset, whence);
+ return GMIME_STREAM_CLASS(libbalsa_mime_stream_shared_parent_class)->seek(stream, offset, whence);
}
static GMimeStream *
lbmss_stream_substream(GMimeStream * stream, gint64 start, gint64 end)
{
- LibBalsaMimeStreamShared *stream_shared;
+ LibBalsaMimeStreamShared *shared_stream;
GMimeStreamFs *fstream;
- stream_shared =
+ shared_stream =
g_object_new(LIBBALSA_TYPE_MIME_STREAM_SHARED, NULL, NULL);
- stream_shared->lock =
- lbmss_lock_ref(LIBBALSA_MIME_STREAM_SHARED(stream)->lock);
+ shared_stream->lock = LIBBALSA_MIME_STREAM_SHARED(stream)->lock;
- fstream = GMIME_STREAM_FS(stream_shared);
+ fstream = GMIME_STREAM_FS(shared_stream);
fstream->owner = FALSE;
fstream->fd = GMIME_STREAM_FS(stream)->fd;
g_mime_stream_construct(GMIME_STREAM(fstream), start, end);
@@ -232,15 +184,15 @@ lbmss_stream_substream(GMimeStream * stream, gint64 start, gint64 end)
GMimeStream *
libbalsa_mime_stream_shared_new(int fd)
{
- LibBalsaMimeStreamShared *stream_shared;
+ LibBalsaMimeStreamShared *shared_stream;
GMimeStreamFs *fstream;
gint64 start;
- stream_shared =
+ shared_stream =
g_object_new(LIBBALSA_TYPE_MIME_STREAM_SHARED, NULL, NULL);
- stream_shared->lock = lbmss_lock_new();
+ shared_stream->lock = lbmss_lock_new();
- fstream = GMIME_STREAM_FS(stream_shared);
+ fstream = GMIME_STREAM_FS(shared_stream);
fstream->owner = TRUE;
fstream->eos = FALSE;
fstream->fd = fd;
@@ -260,7 +212,7 @@ libbalsa_mime_stream_shared_new(int fd)
void
libbalsa_mime_stream_shared_lock(GMimeStream * stream)
{
- LibBalsaMimeStreamShared *stream_shared;
+ LibBalsaMimeStreamShared *shared_stream;
LibBalsaMimeStreamSharedLock *lock;
GThread *thread_self;
@@ -272,8 +224,8 @@ libbalsa_mime_stream_shared_lock(GMimeStream * stream)
if (!LIBBALSA_IS_MIME_STREAM_SHARED(stream))
return;
- stream_shared = (LibBalsaMimeStreamShared *) stream;
- lock = stream_shared->lock;
+ shared_stream = (LibBalsaMimeStreamShared *) stream;
+ lock = shared_stream->lock;
thread_self = g_thread_self();
g_mutex_lock(&lbmss_mutex);
@@ -293,7 +245,7 @@ libbalsa_mime_stream_shared_lock(GMimeStream * stream)
void
libbalsa_mime_stream_shared_unlock(GMimeStream * stream)
{
- LibBalsaMimeStreamShared *stream_shared;
+ LibBalsaMimeStreamShared *shared_stream;
LibBalsaMimeStreamSharedLock *lock;
g_return_if_fail(GMIME_IS_STREAM(stream));
@@ -304,12 +256,14 @@ libbalsa_mime_stream_shared_unlock(GMimeStream * stream)
if (!LIBBALSA_IS_MIME_STREAM_SHARED(stream))
return;
- stream_shared = (LibBalsaMimeStreamShared *) stream;
- lock = stream_shared->lock;
+ shared_stream = (LibBalsaMimeStreamShared *) stream;
+ lock = shared_stream->lock;
g_return_if_fail(lock->count > 0);
g_mutex_lock(&lbmss_mutex);
- if (--lock->count == 0)
+ if (--lock->count == 0) {
+ lock->thread = NULL;
g_cond_signal(&lbmss_cond);
+ }
g_mutex_unlock(&lbmss_mutex);
}
diff --git a/libbalsa/mime-stream-shared.h b/libbalsa/mime-stream-shared.h
index 0db62a2f8..094eef208 100644
--- a/libbalsa/mime-stream-shared.h
+++ b/libbalsa/mime-stream-shared.h
@@ -27,31 +27,15 @@
#include <gmime/gmime-stream-fs.h>
-#define LIBBALSA_TYPE_MIME_STREAM_SHARED \
- (libbalsa_mime_stream_shared_get_type ())
-#define LIBBALSA_MIME_STREAM_SHARED(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- LIBBALSA_TYPE_MIME_STREAM_SHARED, \
- LibBalsaMimeStreamShared))
-#define LIBBALSA_MIME_STREAM_SHARED_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- LIBBALSA_TYPE_MIME_STREAM_SHARED, \
- LibBalsaMimeStreamSharedClass))
-#define LIBBALSA_IS_MIME_STREAM_SHARED(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- LIBBALSA_TYPE_MIME_STREAM_SHARED))
-#define LIBBALSA_IS_MIME_STREAM_SHARED_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- LIBBALSA_TYPE_MIME_STREAM_SHARED))
-#define LIBBALSA_MIME_STREAM_SHARED_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS((obj), \
- LIBBALSA_TYPE_MIME_STREAM_SHARED, \
- LibBalsaMimeStreamSharedClass))
-
-typedef struct _LibBalsaMimeStreamShared LibBalsaMimeStreamShared;
-typedef struct _LibBalsaMimeStreamSharedClass LibBalsaMimeStreamSharedClass;
-
-GType libbalsa_mime_stream_shared_get_type(void);
+#define LIBBALSA_TYPE_MIME_STREAM_SHARED libbalsa_mime_stream_shared_get_type()
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMimeStreamFs, g_object_unref)
+
+G_DECLARE_FINAL_TYPE(LibBalsaMimeStreamShared,
+ libbalsa_mime_stream_shared,
+ LIBBALSA,
+ MIME_STREAM_SHARED,
+ GMimeStreamFs);
GMimeStream *libbalsa_mime_stream_shared_new(int fd);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]