xthread 0.1.3 → 0.1.4.001

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (6) hide show
  1. data/cond.c +9 -0
  2. data/fifo.c +18 -5
  3. data/monitor.c +18 -0
  4. data/queue.c +14 -3
  5. data/xthread.gemspec +10 -2
  6. metadata +6 -5
data/cond.c CHANGED
@@ -43,10 +43,19 @@ xthread_cond_memsize(const void *ptr)
43
43
  return ptr ? sizeof(xthread_cond_t) : 0;
44
44
  }
45
45
 
46
+ #ifdef HAVE_RB_DATA_TYPE_T_FUNCTION
46
47
  static const rb_data_type_t xthread_cond_data_type = {
47
48
  "xthread_cond",
48
49
  {xthread_cond_mark, xthread_cond_free, xthread_cond_memsize,},
49
50
  };
51
+ #else
52
+ static const rb_data_type_t xthread_cond_data_type = {
53
+ "xthread_cond",
54
+ xthread_cond_mark,
55
+ xthread_cond_free,
56
+ xthread_cond_memsize,
57
+ };
58
+ #endif
50
59
 
51
60
  static VALUE
52
61
  xthread_cond_alloc(VALUE klass)
data/fifo.c CHANGED
@@ -55,8 +55,10 @@ static void
55
55
  xthread_fifo_free(void *ptr)
56
56
  {
57
57
  xthread_fifo_t *fifo = (xthread_fifo_t*)ptr;
58
-
59
- ruby_xfree(fifo->elements);
58
+
59
+ if (fifo->elements) {
60
+ ruby_xfree(fifo->elements);
61
+ }
60
62
  ruby_xfree(ptr);
61
63
  }
62
64
 
@@ -68,10 +70,19 @@ xthread_fifo_memsize(const void *ptr)
68
70
  return ptr ? sizeof(xthread_fifo_t) + fifo->capa * sizeof(VALUE): 0;
69
71
  }
70
72
 
73
+ #ifdef HAVE_RB_DATA_TYPE_T_FUNCTION
71
74
  static const rb_data_type_t xthread_fifo_data_type = {
72
75
  "xthread_fifo",
73
76
  {xthread_fifo_mark, xthread_fifo_free, xthread_fifo_memsize,},
74
77
  };
78
+ #else
79
+ static const rb_data_type_t xthread_fifo_data_type = {
80
+ "xthread_fifo",
81
+ xthread_fifo_mark,
82
+ xthread_fifo_free,
83
+ xthread_fifo_memsize,
84
+ };
85
+ #endif
75
86
 
76
87
  static VALUE
77
88
  xthread_fifo_alloc(VALUE klass)
@@ -84,7 +95,7 @@ xthread_fifo_alloc(VALUE klass)
84
95
  fifo->push = 0;
85
96
  fifo->pop = 0;
86
97
 
87
- fifo->capa = FIFO_DEFAULT_CAPA;
98
+ fifo->capa = 0;
88
99
  fifo->elements = NULL;
89
100
 
90
101
  return obj;
@@ -117,7 +128,8 @@ xthread_fifo_initialize(VALUE self)
117
128
  {
118
129
  xthread_fifo_t *fifo;
119
130
  GetXThreadFifoPtr(self, fifo);
120
-
131
+
132
+ fifo->capa = FIFO_DEFAULT_CAPA;
121
133
  fifo->elements = ALLOC_N(VALUE, fifo->capa);
122
134
  return self;
123
135
  }
@@ -165,7 +177,8 @@ rb_xthread_fifo_pop(VALUE self)
165
177
  if (fifo->push == fifo->pop)
166
178
  return Qnil;
167
179
 
168
- item = fifo->elements[fifo->pop++];
180
+ item = fifo->elements[fifo->pop];
181
+ fifo->elements[fifo->pop++] = Qnil;
169
182
  if(fifo->pop >= fifo->capa) {
170
183
  fifo->pop -= fifo->capa;
171
184
  fifo->push -= fifo->capa;
data/monitor.c CHANGED
@@ -56,10 +56,19 @@ xthread_monitor_memsize(const void *ptr)
56
56
  return ptr ? sizeof(xthread_monitor_t) : 0;
57
57
  }
58
58
 
59
+ #ifdef HAVE_RB_DATA_TYPE_T_FUNCTION
59
60
  static const rb_data_type_t xthread_monitor_data_type = {
60
61
  "xthread_monitor",
61
62
  {xthread_monitor_mark, xthread_monitor_free, xthread_monitor_memsize,},
62
63
  };
64
+ #else
65
+ static const rb_data_type_t xthread_monitor_data_type = {
66
+ "xthread_monitor",
67
+ xthread_monitor_mark,
68
+ xthread_monitor_free,
69
+ xthread_monitor_memsize,
70
+ };
71
+ #endif
63
72
 
64
73
  static VALUE
65
74
  xthread_monitor_alloc(VALUE klass)
@@ -243,10 +252,19 @@ xthread_monitor_cond_memsize(const void *ptr)
243
252
  return ptr ? sizeof(xthread_monitor_cond_t) : 0;
244
253
  }
245
254
 
255
+ #ifdef HAVE_RB_DATA_TYPE_T_FUNCTION
246
256
  static const rb_data_type_t xthread_monitor_cond_data_type = {
247
257
  "xthread_monitor_cond",
248
258
  {xthread_monitor_cond_mark, xthread_monitor_cond_free, xthread_monitor_cond_memsize,},
249
259
  };
260
+ #else
261
+ static const rb_data_type_t xthread_monitor_cond_data_type = {
262
+ "xthread_monitor_cond",
263
+ xthread_monitor_cond_mark,
264
+ xthread_monitor_cond_free,
265
+ xthread_monitor_cond_memsize,
266
+ };
267
+ #endif
250
268
 
251
269
  static VALUE
252
270
  xthread_monitor_cond_alloc(VALUE klass)
data/queue.c CHANGED
@@ -49,10 +49,19 @@ xthread_queue_memsize(const void *ptr)
49
49
  return ptr ? sizeof(xthread_queue_t) : 0;
50
50
  }
51
51
 
52
+ #ifdef HAVE_RB_DATA_TYPE_T_FUNCTION
52
53
  static const rb_data_type_t xthread_queue_data_type = {
53
54
  "xthread_queue",
54
55
  {xthread_queue_mark, xthread_queue_free, xthread_queue_memsize,},
55
56
  };
57
+ #else
58
+ static const rb_data_type_t xthread_queue_data_type = {
59
+ "xthread_queue",
60
+ xthread_queue_mark,
61
+ xthread_queue_free,
62
+ xthread_queue_memsize,
63
+ };
64
+ #endif
56
65
 
57
66
  static void
58
67
  xthread_queue_alloc_init(xthread_queue_t *que)
@@ -217,6 +226,8 @@ xthread_sized_queue_memsize(const void *ptr)
217
226
  return ptr ? sizeof(xthread_sized_queue_t) : 0;
218
227
  }
219
228
 
229
+
230
+ #ifdef HAVE_RB_DATA_TYPE_T_FUNCTION
220
231
  static const rb_data_type_t xthread_sized_queue_data_type = {
221
232
  "xthread_sized_queue",
222
233
  {xthread_sized_queue_mark, xthread_sized_queue_free, xthread_sized_queue_memsize,},
@@ -355,6 +366,7 @@ xthread_sized_queue_pop(int argc, VALUE *argv, VALUE self)
355
366
  }
356
367
  return item;
357
368
  }
369
+ #endif
358
370
 
359
371
  void
360
372
  Init_XThreadQueue()
@@ -374,7 +386,7 @@ Init_XThreadQueue()
374
386
  rb_define_method(rb_cXThreadQueue, "length", rb_xthread_queue_length, 0);
375
387
  rb_define_alias(rb_cXThreadQueue, "size", "length");
376
388
 
377
-
389
+ #ifdef HAVE_RB_DATA_TYPE_T_FUNCTION
378
390
  rb_cXThreadSizedQueue = rb_define_class_under(rb_mXThread, "SizedQueue", rb_cXThreadQueue);
379
391
 
380
392
  rb_define_alloc_func(rb_cXThreadSizedQueue, xthread_sized_queue_alloc);
@@ -388,6 +400,5 @@ Init_XThreadQueue()
388
400
 
389
401
  rb_define_method(rb_cXThreadSizedQueue, "max", rb_xthread_sized_queue_max, 0);
390
402
  rb_define_method(rb_cXThreadSizedQueue, "max=", rb_xthread_sized_queue_set_max, 1);
391
-
392
-
403
+ #endif
393
404
  }
@@ -1,15 +1,23 @@
1
1
 
2
2
  require "rubygems"
3
3
 
4
+ tag = `git tag`.split.sort.last
5
+ v, dmy, p = tag.scan(/^v([0-9]+\.[0-9]+\.[0-9]+)(-([0-9]+))?/).first
6
+ if p.to_i > 0
7
+ v += "."+p
8
+ end
9
+ p v
10
+
4
11
  Gem::Specification.new do |s|
5
12
  s.name = "xthread"
6
13
  s.authors = "Keiju.Ishitsuka"
7
14
  s.email = "keiju@ishitsuka.com"
8
15
  s.platform = Gem::Platform::RUBY
9
- s.summary = "C-implementation version of thread.rb and monitor.eb libraries"
16
+ s.summary = "C-implementation version of thread.rb and monitor.rb libraries"
10
17
  s.rubyforge_project = s.name
11
18
  s.homepage = "http://github.com/keiju/xthread"
12
- s.version = `git tag`.split.collect{|e| e.sub(/v([0-9]+\.[0-9]+\.[0-9]+).*/, "\\1")}.sort.last
19
+
20
+ s.version = v
13
21
  s.require_path = "."
14
22
  # s.test_file = ""
15
23
  # s.executable = ""
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xthread
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 85
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 3
10
- version: 0.1.3
9
+ - 4
10
+ - 1
11
+ version: 0.1.4.001
11
12
  platform: ruby
12
13
  authors:
13
14
  - Keiju.Ishitsuka
@@ -15,7 +16,7 @@ autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2011-04-10 00:00:00 +09:00
19
+ date: 2011-04-19 00:00:00 +09:00
19
20
  default_executable:
20
21
  dependencies: []
21
22
 
@@ -74,6 +75,6 @@ rubyforge_project: xthread
74
75
  rubygems_version: 1.3.7
75
76
  signing_key:
76
77
  specification_version: 3
77
- summary: C-implementation version of thread.rb and monitor.eb libraries
78
+ summary: C-implementation version of thread.rb and monitor.rb libraries
78
79
  test_files: []
79
80