diff options
author | Eric Wong <e@80x24.org> | 2017-03-18 08:16:31 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2017-03-18 08:16:31 +0000 |
commit | c374ed19128f87a52f024bd7a8e56e13f7423603 (patch) | |
tree | 64e278d4cb3a2c793eb4e36e6e2e4277625a0d18 | |
parent | 958d445f48ceb1b6ded4f193d03681273734c860 (diff) | |
download | ruby_posix_mq-c374ed19128f87a52f024bd7a8e56e13f7423603.tar.gz |
This provides some extra type safety if combined with other C extensions, as well as allowing us to account for memory usage of the HTTP parser in ObjectSpace. This requires Ruby 1.9.3+ and has remained a stable API since then. This will become officially supported when Ruby 2.3.0 is released later this month. This API has only been documented in doc/extension.rdoc (formerly README.EXT) in the Ruby source tree since April 2015, r50318
-rw-r--r-- | ext/posix_mq/posix_mq.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/ext/posix_mq/posix_mq.c b/ext/posix_mq/posix_mq.c index 55ec51e..83e9e58 100644 --- a/ext/posix_mq/posix_mq.c +++ b/ext/posix_mq/posix_mq.c @@ -317,11 +317,22 @@ static void _free(void *ptr) xfree(ptr); } +static size_t memsize(const void *ptr) +{ + return sizeof(struct posix_mq); +} + +static const rb_data_type_t mqtype = { + "posix_mq", + { mark, _free, memsize, /* reserved */ }, + /* parent, data, [ flags ] */ +}; + /* automatically called at creation (before initialize) */ static VALUE alloc(VALUE klass) { struct posix_mq *mq; - VALUE rv = Data_Make_Struct(klass, struct posix_mq, mark, _free, mq); + VALUE rv = TypedData_Make_Struct(klass, struct posix_mq, &mqtype, mq); mq->des = MQD_INVALID; mq->autoclose = 1; @@ -341,7 +352,7 @@ static struct posix_mq *get(VALUE self, int need_valid) { struct posix_mq *mq; - Data_Get_Struct(self, struct posix_mq, mq); + TypedData_Get_Struct(self, struct posix_mq, &mqtype, mq); if (need_valid && mq->des == MQD_INVALID) rb_raise(rb_eIOError, "closed queue descriptor"); |