ghazel-curb 0.5.9.1 → 0.6.1.0

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.
data/ext/curb.h CHANGED
@@ -20,12 +20,12 @@
20
20
  #include "curb_macros.h"
21
21
 
22
22
  // These should be managed from the Rake 'release' task.
23
- #define CURB_VERSION "0.5.9.1"
24
- #define CURB_VER_NUM 591
23
+ #define CURB_VERSION "0.6.1.0"
24
+ #define CURB_VER_NUM 610
25
25
  #define CURB_VER_MAJ 0
26
- #define CURB_VER_MIN 5
27
- #define CURB_VER_MIC 9
28
- #define CURB_VER_PATCH 1
26
+ #define CURB_VER_MIN 6
27
+ #define CURB_VER_MIC 1
28
+ #define CURB_VER_PATCH 0
29
29
 
30
30
 
31
31
  // Maybe not yet defined in Ruby
data/ext/curb_easy.c CHANGED
@@ -162,10 +162,6 @@ void curl_easy_mark(ruby_curl_easy *rbce) {
162
162
  rb_gc_mark(rbce->bodybuf);
163
163
  rb_gc_mark(rbce->headerbuf);
164
164
 
165
- if( rbce->self != Qnil ) {
166
- rb_gc_mark(rbce->self);
167
- }
168
-
169
165
  if( rbce->upload != Qnil ) {
170
166
  rb_gc_mark(rbce->upload);
171
167
  }
@@ -263,13 +259,12 @@ static VALUE ruby_curl_easy_new(int argc, VALUE *argv, VALUE klass) {
263
259
  rbce->headerbuf = Qnil;
264
260
  rbce->curl_headers = NULL;
265
261
 
266
- rbce->self = Qnil;
267
262
  rbce->upload = Qnil;
268
263
 
269
264
  new_curl = Data_Wrap_Struct(klass, curl_easy_mark, curl_easy_free, rbce);
270
265
 
271
- /* set the rbce pointer to the curl handle */
272
- ecode = curl_easy_setopt(rbce->curl, CURLOPT_PRIVATE, (void*)rbce);
266
+ /* set the new_curl pointer to the curl handle */
267
+ ecode = curl_easy_setopt(rbce->curl, CURLOPT_PRIVATE, (void*)new_curl);
273
268
  if (ecode != CURLE_OK) {
274
269
  raise_curl_easy_error_exception(ecode);
275
270
  }
@@ -2636,7 +2631,7 @@ static VALUE ruby_curl_easy_escape(VALUE self, VALUE svalue) {
2636
2631
 
2637
2632
  /*
2638
2633
  * call-seq:
2639
- * easy.unescape("some text") => "some%20text"
2634
+ * easy.unescape("some%20text") => "some text"
2640
2635
  *
2641
2636
  * Convert the given URL encoded input string to a "plain string" and return
2642
2637
  * the result. All input characters that are URL encoded (%XX where XX is a
data/ext/curb_easy.h CHANGED
@@ -86,7 +86,7 @@ typedef struct {
86
86
  VALUE headerbuf;
87
87
  struct curl_slist *curl_headers;
88
88
 
89
- VALUE self; /* pointer to self, used by multi interface */
89
+ // VALUE self; /* pointer to self, used by multi interface */
90
90
  VALUE upload; /* pointer to an active upload otherwise Qnil */
91
91
 
92
92
  int last_result; /* last result code from multi loop */
data/ext/curb_multi.c CHANGED
@@ -199,9 +199,6 @@ VALUE ruby_curl_multi_add(VALUE self, VALUE easy) {
199
199
  raise_curl_multi_error_exception(mcode);
200
200
  }
201
201
 
202
- /* save a pointer to self */
203
- rbce->self = easy;
204
-
205
202
  /* setup the easy handle */
206
203
  ruby_curl_easy_setup( rbce, &(rbce->bodybuf), &(rbce->headerbuf), &(rbce->curl_headers) );
207
204
 
@@ -263,11 +260,11 @@ static void rb_curl_multi_remove(ruby_curl_multi *rbcm, VALUE easy) {
263
260
  // active should equal INT2FIX(RHASH(rbcm->requests)->tbl->num_entries)
264
261
  r = rb_hash_delete( rbcm->requests, easy );
265
262
  if( r != easy || r == Qnil ) {
266
- rb_raise(rb_eRuntimeError, "Critical:: Unable to remove easy from requests");
263
+ rb_warn("Possibly lost tack of Curl::Easy VALUE, it may not be reclaimed by GC");
267
264
  }
268
265
  }
269
266
 
270
- // Hash#foreach callback for ruby_curl_multi_cancel
267
+ /* Hash#foreach callback for ruby_curl_multi_cancel */
271
268
  static int ruby_curl_multi_cancel_callback(VALUE key, VALUE value, ruby_curl_multi *rbcm) {
272
269
  rb_curl_multi_remove(rbcm, value);
273
270
 
@@ -287,16 +284,19 @@ static VALUE ruby_curl_multi_cancel(VALUE self) {
287
284
 
288
285
  rb_hash_foreach( rbcm->requests, ruby_curl_multi_cancel_callback, (VALUE)rbcm );
289
286
 
290
- // for chaining
287
+ /* for chaining */
291
288
  return self;
292
289
  }
293
290
 
294
291
  static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int result) {
295
292
 
296
293
  long response_code = -1;
294
+ VALUE easy;
297
295
  ruby_curl_easy *rbce = NULL;
298
- VALUE ref;
299
- CURLcode ecode = curl_easy_getinfo(easy_handle, CURLINFO_PRIVATE, (char**)&rbce);
296
+
297
+ CURLcode ecode = curl_easy_getinfo(easy_handle, CURLINFO_PRIVATE, (char**)&easy);
298
+
299
+ Data_Get_Struct(easy, ruby_curl_easy, rbce);
300
300
 
301
301
  if (ecode != 0) {
302
302
  raise_curl_easy_error_exception(ecode);
@@ -304,31 +304,27 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
304
304
 
305
305
  rbce->last_result = result; /* save the last easy result code */
306
306
 
307
- ruby_curl_multi_remove( self, rbce->self );
307
+ ruby_curl_multi_remove( self, easy );
308
308
 
309
309
  if (rbce->complete_proc != Qnil) {
310
- rb_funcall( rbce->complete_proc, idCall, 1, rbce->self );
310
+ rb_funcall( rbce->complete_proc, idCall, 1, easy );
311
311
  }
312
312
 
313
313
  curl_easy_getinfo(rbce->curl, CURLINFO_RESPONSE_CODE, &response_code);
314
314
 
315
- ref = rbce->self;
316
- /* break reference */
317
- rbce->self = Qnil;
318
-
319
315
  if (result != 0) {
320
316
  if (rbce->failure_proc != Qnil) {
321
- rb_funcall( rbce->failure_proc, idCall, 2, ref, rb_curl_easy_error(result) );
317
+ rb_funcall( rbce->failure_proc, idCall, 2, easy, rb_curl_easy_error(result) );
322
318
  }
323
319
  }
324
320
  else if (rbce->success_proc != Qnil &&
325
321
  ((response_code >= 200 && response_code < 300) || response_code == 0)) {
326
322
  /* NOTE: we allow response_code == 0, in the case of non http requests e.g. reading from disk */
327
- rb_funcall( rbce->success_proc, idCall, 1, ref );
323
+ rb_funcall( rbce->success_proc, idCall, 1, easy );
328
324
  }
329
325
  else if (rbce->failure_proc != Qnil &&
330
326
  (response_code >= 300 && response_code <= 999)) {
331
- rb_funcall( rbce->failure_proc, idCall, 2, ref, rb_curl_easy_error(result) );
327
+ rb_funcall( rbce->failure_proc, idCall, 2, easy, rb_curl_easy_error(result) );
332
328
  }
333
329
  }
334
330
 
@@ -391,7 +391,7 @@ class TestCurbCurlMulti < Test::Unit::TestCase
391
391
  def test_retry_easy_handle
392
392
  m = Curl::Multi.new
393
393
 
394
- tries = 2
394
+ tries = 10
395
395
 
396
396
  c1 = Curl::Easy.new('http://127.1.1.1:99911') do |curl|
397
397
  curl.on_failure {|c,e|
@@ -406,13 +406,24 @@ class TestCurbCurlMulti < Test::Unit::TestCase
406
406
  tries -= 1
407
407
  m.add(c1)
408
408
 
409
- while not m.requests.empty?
410
- m.perform
411
- end
409
+ m.perform
412
410
  assert_equal 0, tries
413
411
  assert_equal 0, m.requests.size
414
412
  end
415
413
 
414
+ def test_reusing_handle
415
+ m = Curl::Multi.new
416
+
417
+ c = Curl::Easy.new('http://127.0.0.1') do|easy|
418
+ easy.on_complete{|e,r| puts e.inspect }
419
+ end
420
+
421
+ m.add(c)
422
+ m.add(c)
423
+ rescue => e
424
+ assert_equal Curl::Err::MultiBadEasyHandle, e.class
425
+ end
426
+
416
427
  include TestServerMethods
417
428
 
418
429
  def setup
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ghazel-curb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.9.1
4
+ version: 0.6.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ross Bamford
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-11-24 00:00:00 -08:00
13
+ date: 2009-12-06 00:00:00 -08:00
14
14
  default_executable:
15
15
  dependencies: []
16
16