This is a multi-part message in MIME format. --------------010607080103020505010803 Content-Type: multipart/alternative; boundary -----------010501090207000102020901" --------------010501090207000102020901 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hello, I have two patches that fix / enhance the C version of ruby-fcgi. This message was sent to the maintainer several days ago, but I haven't received a response. I'm hoping perhaps he reads this list. The fix: fcgi_stream_read() does not free the buff variable, which results in memory leakage that is most noticeable when handling large file uploads. Simply doing a: ------------------------ FCGI::each { |request| until request.in.eof? request.in.read(1024) end } ------------------------ exposes the problem, as the application grows in size with each new client POST. Calling GC.start does nothing to decrease the size. The first patch appears to solve this problem. The second patch adds a new method FCGI::open_socket(socket_path, tcp_backlog) which allows the library to be used with the FastCgiExternalServer option of mod_fastcgi for Apache. FCGI::accept() and FCGI::each() had to be patched to optionally take this new socket argument. Example usage would be: sock CGI.open_socket('localhost:23443', 10) FCGI::each(sock) { |request| ... } Thank you for considering these patches. Regards, -Brad Hilton --------------010501090207000102020901 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-MIME-Autoconverted: from 8bit to quoted-printable by funfun.nagaokaut.ac.jp id h8PKYeu85133 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title></title> </head> <body> <meta content="text/html; CHARSET=UTF-8" http-equiv="Content-Type"> <meta content="GtkHTML/3.0.8" name="GENERATOR"> Hello,<br> <br> I have two patches that fix / enhance the C version of ruby-fcgi. This message was sent to the maintainer several days ago, but I haven't received a response. I'm hoping perhaps he reads this list.<br> <br> The fix:<br> fcgi_stream_read() does not free the buff variable, which results in memory leakage that is most noticeable when handling large file uploads. Simply doing a:<br> <br> ------------------------<br> FCGI::each { |request|<br> until request.in.eof?<br> request.in.read(1024)<br> end<br> }<br> ------------------------<br> <br> exposes the problem, as the application grows in size with each new client POST. Calling GC.start does nothing to decrease the size. The first patch appears to solve this problem.<br> <br> The second patch adds a new method FCGI::open_socket(socket_path, tcp_backlog) which allows the library to be used with the FastCgiExternalServer option of mod_fastcgi for Apache. FCGI::accept() and FCGI::each() had to be patched to optionally take this new socket argument. Example usage would be:<br> <br> sock = FCGI.open_socket('localhost:23443', 10)<br> <br> FCGI::each(sock) { |request|<br> ...<br> }<br> <br> Thank you for considering these patches.<br> <br> Regards,<br> -Brad Hilton </body> </html> --------------010501090207000102020901-- --------------010607080103020505010803 Content-Type: text/plain; name atch-fcgi-xfree" Content-Disposition: inline; filename atch-fcgi-xfree" Content-Transfer-Encoding: base64 LS0tIGZjZ2kuYy5vcmlnCTIwMDMtMDktMjMgMTE6MjA6MDEuMDAwMDAwMDAwIC0wNzAwCisr KyBmY2dpLmMJMjAwMy0wOS0yMyAxMToyMDoyOS4wMDAwMDAwMDAgLTA3MDAKQEAgLTM4OSw5 ICszODksMTEgQEAgc3RhdGljIFZBTFVFIGZjZ2lfc3RyZWFtX3JlYWQoaW50IGFyZ2MsIAog ICAgICAgaWYgKG4gPiAwKSB7CiAgICAgICAgIHJiX3N0cl9jYXQoc3RyLCBidWZmLCBuKTsK ICAgICAgIH0gZWxzZSB7CisgICAgICAgIHhmcmVlKGJ1ZmYpOwogICAgICAgICByZXR1cm4g UW5pbDsKICAgICAgIH0KICAgICB9CisgICAgeGZyZWUoYnVmZik7CiAgICAgcmV0dXJuIHN0 cjsKICAgfQogCkBAIC00MDQsOSArNDA2LDExIEBAIHN0YXRpYyBWQUxVRSBmY2dpX3N0cmVh bV9yZWFkKGludCBhcmdjLCAKICAgaWYgKG4gPiAwKSB7CiAgICAgc3RyID0gcmJfc3RyX25l dyhidWZmLCBuKTsKICAgICBPQkpfVEFJTlQoc3RyKTsKKyAgICB4ZnJlZShidWZmKTsKICAg ICByZXR1cm4gc3RyOwogICB9CiAgIGVsc2UgeworICAgIHhmcmVlKGJ1ZmYpOwogICAgIHJl dHVybiBRbmlsOwogICB9CiB9Cgo--------------010607080103020505010803 Content-Type: text/plain; name atch-ruby-fcgi2" Content-Disposition: inline; filename atch-ruby-fcgi2" Content-Transfer-Encoding: base64 LS0tIGZjZ2kuYwkyMDAzLTA5LTIzIDExOjIwOjI5LjAwMDAwMDAwMCAtMDcwMAorKysgL2hv bWUvYmhpbHRvbi9mY2dpLmMucGF0Y2hlZAkyMDAzLTA5LTIzIDExOjIwOjUwLjAwMDAwMDAw MCAtMDcwMApAQCAtMzcsMTUgKzM3LDM3IEBAIHN0YXRpYyB2b2lkIGZjZ2lfbWFyayhmY2dp X2RhdGEgKmRhdGEpCiAgIHJiX2djX21hcmsoZGF0YS0+ZW52KTsKIH0KIAotc3RhdGljIFZB TFVFIGZjZ2lfc19hY2NlcHQoVkFMVUUgc2VsZikKK3N0YXRpYyBWQUxVRSBmY2dpX3Nfb3Bl bl9zb2NrZXQoVkFMVUUgc2VsZiwgVkFMVUUgcGF0aCwgVkFMVUUgYmFja2xvZykKK3sKKyAg VkFMVUUgZmlsZW5vOworCisgIGZpbGVubyA9IElOVDJOVU0oRkNHWF9PcGVuU29ja2V0KCBT VFIyQ1NUUihwYXRoKSwgTlVNMklOVChiYWNrbG9nKSApKTsKKyAgcmV0dXJuIHJiX2Z1bmNh bGwocmJfY0lPLCByYl9pbnRlcm4oIm5ldyIpLCAxLCBmaWxlbm8pOworfQorCitzdGF0aWMg VkFMVUUgZmNnaV9zX2FjY2VwdChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIHNlbGYp CiB7CiAgIGludCBzdGF0dXM7CiAgIEZDR1hfUmVxdWVzdCAqcmVxOwogICBmZF9zZXQgcmVh ZGZkczsKKyAgaW50IGZpbGVubzsKKworICBzd2l0Y2ggKGFyZ2MpCisgIHsKKyAgICBjYXNl IDE6CisgICAgICBmaWxlbm8gPSBOVU0ySU5UKHJiX2Z1bmNhbGwoYXJndlswXSwgcmJfaW50 ZXJuKCJmaWxlbm8iKSwgMCkpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAwOgorICAgICAg ZmlsZW5vID0gMDsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByYl9yYWlz ZShyYl9lQXJnRXJyb3IsICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzICgwIG9yIDEpIik7 CisgICAgICBicmVhazsKKyAgfQogICAKICAgcmVxID0gQUxMT0MoRkNHWF9SZXF1ZXN0KTsK ICAgCi0gIHN0YXR1cyA9IEZDR1hfSW5pdFJlcXVlc3QocmVxLDAsMCk7CisgIHN0YXR1cyA9 IEZDR1hfSW5pdFJlcXVlc3QocmVxLGZpbGVubywwKTsKICAgaWYgKHN0YXR1cyAhPSAwKSB7 CiAgICAgcmJfcmFpc2UoZUZDR0lFcnJvciwgIkZDR1hfSW5pdCgpIGZhaWxlZCIpOwogICAg IHJldHVybiBRbmlsOwpAQCAtODksMTEgKzExMSwyOCBAQCBzdGF0aWMgVkFMVUUgZmNnaV9z X2FjY2VwdChWQUxVRSBzZWxmKQogICB9CiB9CiAKLXN0YXRpYyBWQUxVRSBmY2dpX3NfZWFj aChWQUxVRSBzZWxmKQorc3RhdGljIFZBTFVFIGZjZ2lfc19lYWNoKGludCBhcmdjLCBWQUxV RSAqYXJndiwgVkFMVUUgc2VsZikKIHsKICAgVkFMVUUgZmNnaTsKKyAgVkFMVUUgc29ja2V0 OworICBWQUxVRSBhcmdzWzFdOworCisgIHN3aXRjaChhcmdjKQorICB7CisgICAgY2FzZSAx OgorICAgICAgc29ja2V0ID0gYXJndlswXTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMDoK KyAgICAgIHNvY2tldCA9IHJiX2Z1bmNhbGwocmJfY0lPLCByYl9pbnRlcm4oIm5ldyIpLCAx LCBJTlQyTlVNKDApKTsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICByYl9y YWlzZShyYl9lQXJnRXJyb3IsICJ3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzICgwIG9yIDEp Iik7CisgICAgICBicmVhazsKKyAgfQorCisgIGFyZ3NbMF0gPSBzb2NrZXQ7CiAgIAotICB3 aGlsZSAoKGZjZ2kgPSBmY2dpX3NfYWNjZXB0KHNlbGYpKSAhPSBRbmlsKSB7CisgIHdoaWxl ICgoZmNnaSA9IGZjZ2lfc19hY2NlcHQoMSwgYXJncywgc2VsZikpICE9IFFuaWwpIHsKICAg ICByYl95aWVsZChmY2dpKTsKICAgfQogICByZXR1cm4gUW5pbDsKQEAgLTQ4OCw5ICs1Mjcs MTAgQEAgdm9pZCBJbml0X2ZjZ2koKQogICAKICAgY0ZDR0kgPSByYl9kZWZpbmVfY2xhc3Mo IkZDR0kiLCByYl9jT2JqZWN0KTsKICAgZUZDR0lFcnJvciA9cmJfZGVmaW5lX2NsYXNzX3Vu ZGVyKGNGQ0dJLCAiRXJyb3IiLCByYl9lU3RhbmRhcmRFcnJvcik7Ci0gIHJiX2RlZmluZV9z aW5nbGV0b25fbWV0aG9kKGNGQ0dJLCAiYWNjZXB0IiwgZmNnaV9zX2FjY2VwdCwgMCk7Ci0g IHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNGQ0dJLCAiZWFjaCIsIGZjZ2lfc19lYWNo LCAwKTsKLSAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QoY0ZDR0ksICJlYWNoX3JlcXVl c3QiLCBmY2dpX3NfZWFjaCwgMCk7CisgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNG Q0dJLCAiYWNjZXB0IiwgZmNnaV9zX2FjY2VwdCwgLTEpOworICByYl9kZWZpbmVfc2luZ2xl dG9uX21ldGhvZChjRkNHSSwgIm9wZW5fc29ja2V0IiwgZmNnaV9zX29wZW5fc29ja2V0LCAy KTsKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QoY0ZDR0ksICJlYWNoIiwgZmNnaV9z X2VhY2gsIC0xKTsKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QoY0ZDR0ksICJlYWNo X3JlcXVlc3QiLCBmY2dpX3NfZWFjaCwgLTEpOwogICByYl9kZWZpbmVfc2luZ2xldG9uX21l dGhvZChjRkNHSSwgImlzX2NnaT8iLCBmY2dpX3NfaXNjZ2ksIDApOwogICByYl9kZWZpbmVf bWV0aG9kKGNGQ0dJLCAiaW4iLCBmY2dpX2luLCAwKTsKICAgcmJfZGVmaW5lX21ldGhvZChj RkNHSSwgIm91dCIsIGZjZ2lfb3V0LCAwKTsKCg --------------010607080103020505010803--