diff --git a/bindings/ruby/database.c b/bindings/ruby/database.c index 0159aaac..1cf4e4e2 100644 --- a/bindings/ruby/database.c +++ b/bindings/ruby/database.c @@ -81,7 +81,7 @@ notmuch_rb_database_initialize (int argc, VALUE *argv, VALUE self) ret = notmuch_database_open (path, mode, &database); notmuch_rb_status_raise (ret); - DATA_PTR (self) = notmuch_rb_object_create (database); + DATA_PTR (self) = notmuch_rb_object_create (database, "notmuch_rb_database"); return self; } diff --git a/bindings/ruby/defs.h b/bindings/ruby/defs.h index 7ddb5df5..0f39f2d0 100644 --- a/bindings/ruby/defs.h +++ b/bindings/ruby/defs.h @@ -23,6 +23,7 @@ #include #include +#include extern VALUE notmuch_rb_cDatabase; extern VALUE notmuch_rb_cDirectory; @@ -83,7 +84,7 @@ extern const rb_data_type_t notmuch_rb_tags_type; } while (0) #define Data_Wrap_Notmuch_Object(klass, type, ptr) \ - TypedData_Wrap_Struct ((klass), (type), notmuch_rb_object_create ((ptr))) + TypedData_Wrap_Struct ((klass), (type), notmuch_rb_object_create ((ptr), "notmuch_rb_object: " __location__)) #define Data_Get_Notmuch_Database(obj, ptr) \ Data_Get_Notmuch_Object ((obj), ¬much_rb_database_type, (ptr)) @@ -117,20 +118,22 @@ typedef struct { } notmuch_rb_object_t; static inline void * -notmuch_rb_object_create (void *nm_object) +notmuch_rb_object_create (void *nm_object, const char *name) { - notmuch_rb_object_t *rb_wrapper = malloc (sizeof (*rb_wrapper)); + notmuch_rb_object_t *rb_wrapper = talloc_named_const (NULL, sizeof (*rb_wrapper), name); + if (RB_UNLIKELY (!rb_wrapper)) return NULL; rb_wrapper->nm_object = nm_object; + talloc_steal (rb_wrapper, nm_object); return rb_wrapper; } static inline void notmuch_rb_object_free (void *rb_wrapper) { - free (rb_wrapper); + talloc_free (rb_wrapper); } static inline notmuch_status_t diff --git a/bindings/ruby/extconf.rb b/bindings/ruby/extconf.rb index 161de5a2..d914537c 100644 --- a/bindings/ruby/extconf.rb +++ b/bindings/ruby/extconf.rb @@ -19,6 +19,7 @@ if not ENV['LIBNOTMUCH'] end $LOCAL_LIBS += ENV['LIBNOTMUCH'] +$LIBS += " -ltalloc" # Create Makefile dir_config('notmuch')