From: Chris Wailes Date: 2007-07-17T07:49:16+09:00 Subject: [PATCH] XMLRPC::ModRubyServer -------91821c1e1a5bb0a3a27dd49d26d1a794 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Made some changes to the XMLRPC::ModRubyServer class that allows it to be loaded as a RubyHandler by ModRuby and prevent it from being reloaded every time a request is made. This can greatly improve performance when the server takes a while to load, such as when it is establishing database connections or loading lots of libraries. As well, I modified the way that the `XMLRPC::Server.dispatch` method calls the service_hook Proc object so that it also passes the name of the XML-RPC method that is called along with the Proc object associated with the name, and the arguments for the method. Sincerely, Chris Wailes -------91821c1e1a5bb0a3a27dd49d26d1a794 Content-Type: text/x-patch; name="ruby-changes.patch" Content-Disposition: inline; filename="ruby-changes.patch" Content-Transfer-Encoding: base64 SW5kZXg6IGxpYi94bWxycGMvc2VydmVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYi94bWxy cGMvc2VydmVyLnJiCShyZXZpc2lvbiAxMjgwOSkKKysrIGxpYi94bWxycGMvc2VydmVyLnJi CSh3b3JraW5nIGNvcHkpCkBAIC0xMjksOSArMTI5LDkgQEAKICAgICBUaGUgc2VydmljZS1o b29rIGlzIGNhbGxlZCB3aXRoIGEgKCh7UHJvY30pKSBvYmplY3QgYW5kIHdpdGggdGhlIHBh cmFtZXRlcnMgZm9yIHRoaXMgKCh7UHJvY30pKS4KICAgICBBbiBleGFtcGxlOgogCi0gICAg ICAgc2VydmVyLnNldF9zZXJ2aWNlX2hvb2sge3xvYmosICphcmdzfAorICAgICAgIHNlcnZl ci5zZXRfc2VydmljZV9ob29rIHt8bWV0aG9kX25hbWUsIG1ldGhvZF9vYmosICphcmdzfAog ICAgICAgICAgYmVnaW4KLSAgICAgICAgICAgcmV0ID0gb2JqLmNhbGwoKmFyZ3MpICAjIGNh bGwgdGhlIG9yaWdpbmFsIHNlcnZpY2UtbWV0aG9kCisgICAgICAgICAgIHJldCA9IG1ldGhv ZF9vYmouY2FsbCgqYXJncykgICMgY2FsbCB0aGUgb3JpZ2luYWwgc2VydmljZS1tZXRob2QK ICAgICAgICAgICAgIyBjb3VsZCBjb252ZXJ0IHRoZSByZXR1cm4gdmFsdWUgCiAgICAgICAg ICByZXN1Y2UKICAgICAgICAgICAgIyByZXNjdWUgZXhjZXB0aW9ucwpAQCAtMzMzLDcgKzMz Myw3IEBACiAgICAgICAgIGlmIEBzZXJ2aWNlX2hvb2submlsPwogICAgICAgICAgIHJldHVy biBvYmouY2FsbCgqYXJncykgCiAgICAgICAgIGVsc2UKLSAgICAgICAgICByZXR1cm4gQHNl cnZpY2VfaG9vay5jYWxsKG9iaiwgKmFyZ3MpCisgICAgICAgICAgcmV0dXJuIEBzZXJ2aWNl X2hvb2suY2FsbChtZXRob2RuYW1lLCBvYmosICphcmdzKQogICAgICAgICBlbmQKICAgICAg IGVuZAogICAgIGVuZCAKQEAgLTQ5OCw0NCArNDk4LDkxIEBACiAKID1iZWdpbgogPSBYTUxS UEM6Ok1vZFJ1YnlTZXJ2ZXIKLT09IERlc2NyaXB0aW9uCi1JbXBsZW1lbnRzIGEgWE1MLVJQ QyBzZXJ2ZXIsIHdoaWNoIHdvcmtzIHdpdGggQXBhY2hlIG1vZF9ydWJ5LgorPT0gU3lub3Bz aXMKK3J1YnlfZmlsZS5yYjoKKwlkZWYgbWFrZV9zZXJ2ZXIKKwkJc2VydmVyID0gWE1MUlBD OjpNb2RSdWJ5U2VydmVyLm5ldygpCiAKLVVzZSBpdCBpbiB0aGUgc2FtZSB3YXkgYXMgQ0dJ U2VydmVyIQorCQlzZXJ2ZXIuYWRkX2hhbmRsZXIoIm1pY2hhZWwuYWRkIikgZG8gfGEsYnwK KwkJCWEgKyBiCisJCWVuZAogCisJCXNlcnZlci5hZGRfaGFuZGxlcigibWljaGFlbC5kaXYi KSBkbyB8YSxifAorCQkJaWYgYiA9PSAwCisJCQkJcmFpc2UgWE1MUlBDOjpGYXVsdEV4Y2Vw dGlvbi5uZXcoMSwgImRpdmlzaW9uIGJ5IHplcm8iKQorCQkJZWxzZQorCQkJCWEgLyBiCisJ CQllbmQKKwkJZW5kCisKKwkJc2VydmVyLnNldF9kZWZhdWx0X2hhbmRsZXIgZG8gfG5hbWUs ICphcmdzfAorCQkJcmFpc2UgWE1MUlBDOjpGYXVsdEV4Y2VwdGlvbi5uZXcoLTk5LCAiTWV0 aG9kICN7bmFtZX0gbWlzc2luZyIgKyAiIG9yIHdyb25nIG51bWJlciBvZiBwYXJhbWV0ZXJz ISIpCisJCWVuZAorCisJCXJldHVybiBzZXJ2ZXIKKwllbmQKKworcnVieS5jb25mOgorI1Ro aXMgaXMgeW91ciBtb2RfcnVieSBjb25maWd1cmF0aW9uIGZpbGUuCisJTG9hZE1vZHVsZSBy dWJ5X21vZHVsZSBtb2R1bGVzL21vZF9ydWJ5LnNvCisKKwlEaXJlY3RvcnlJbmRleCBpbmRl eC5yYgorCisJQWRkVHlwZSB0ZXh0L2h0bWwucmIKKwk8SWZNb2R1bGUgbW9kX3J1YnkuYz4K KwkJUnVieVJlcXVpcmUgYXBhY2hlL3J1YnktcnVuCisKKwkJI0lmIHlvdXIgZmlsZSBpcyBh dCAvcGF0aC90by95b3VyL3J1YnlfZmlsZS5yYgorCQlSdWJ5QWRkUGF0aCAvcGF0aC90by95 b3VyCisJCVJ1YnlSZXF1aXJlIHJ1YnlfZmlsZQorCisJCSMgRXhlYyAqLnJiIGFzIHJ1Ynkg c2NyaXB0cy4KKwkJPEZpbGVzICoucmI+CisJCQlTZXRIYW5kbGVyIHJ1Ynktb2JqZWN0CisJ CQlSdWJ5SGFuZGxlciBBcGFjaGU6OlJ1YnlSdW4uaW5zdGFuY2UKKwkJCU9wdGlvbnMgK0V4 ZWNDR0kKKwkJPC9GaWxlcz4KKwk8L0lmTW9kdWxlPgorCisJI1RoaXMgbG9jYXRpb24gZG9l c24ndCBhY3R1YWxseSBjb3Jpc3BvbmQgdG8gYW55IGZpbGUgc28geW91IGNhbiBtYWtlIGl0 IGFueSBwYXRoIHlvdSB3YW50LgorCSNUaGlzIGV4YW1wbGUgbWFrZXMgdGhlIHNlcnZlciBh ZGRyZXNzIGh0dHA6Ly9leGFtcGxlLmNvbS94bWxycGNzZXJ2ZXIKKwk8TG9jYXRpb24gL3ht bHJwY3NlcnZlcj4KKwkJU2V0SGFuZGxlciBydWJ5LW9iamVjdAorCQlSdWJ5SGFuZGxlciBt YWtlX3NlcnZlcgorCisJCU9yZGVyIGFsbG93LGRlbnkKKwkJQWxsb3cgZnJvbSBhbGwKKwk8 L0xvY2F0aW9uPgorCis9PSBEZXNjcmlwdGlvbgorSW1wbGVtZW50cyBhIFhNTC1SUEMgc2Vy dmVyLCB3aGljaCB3b3JrcyB3aXRoIEFwYWNoZSBtb2RfcnVieS4gIEJ5IHByb3ZpZGluZyB0 aGUgJ2hhbmRsZXInIG1ldGhvZCBhIE1vZFJ1YnlTZXJ2ZXIgb2JqZWN0CitjYW4gYmUgdXNl ZCBhcyBhIFJ1YnlIYW5kbGVyIGJ5IG1vZF9ydWJ5LiAgVGhpcyBwcmV2ZW50cyB0aGUgc2Vy dmVyIGZyb20gYmVpbmcgaW5zdGFudGlhdGVkIGV2ZXJ5IHRpbWUgYSByZXF1ZXN0IGlzIG1h ZGUuCiA9PSBTdXBlcmNsYXNzCiAoKDxYTUxSUEM6OkJhc2ljU2VydmVyPikpCi09ZW5kIAor PWVuZAogCiBjbGFzcyBNb2RSdWJ5U2VydmVyIDwgQmFzaWNTZXJ2ZXIKKwlkZWYgaGFuZGxl cihhcGFjaGVfcmVxdWVzdCkKKwkJQGFwID0gYXBhY2hlX3JlcXVlc3QKIAotICBkZWYgaW5p dGlhbGl6ZSgqYSkKLSAgICBAYXAgPSBBcGFjaGU6OnJlcXVlc3QKLSAgICBzdXBlcigqYSkK LSAgZW5kCisJCWhlYWRlciA9IEhhc2gubmV3CisJCUBhcC5oZWFkZXJzX2luLmVhY2gge3xr ZXksIHZhbHVlfCBoZWFkZXJba2V5LmNhcGl0YWxpemVdID0gdmFsdWV9CiAKLSAgZGVmIHNl cnZlCi0gICAgY2F0Y2goOmV4aXRfc2VydmUpIHsKLSAgICAgIGhlYWRlciA9IHt9Ci0gICAg ICBAYXAuaGVhZGVyc19pbi5lYWNoIHt8a2V5LCB2YWx1ZXwgaGVhZGVyW2tleS5jYXBpdGFs aXplXSA9IHZhbHVlfQorCQlsZW5ndGggPSBoZWFkZXJbJ0NvbnRlbnQtbGVuZ3RoJ10udG9f aQogCi0gICAgICBsZW5ndGggPSBoZWFkZXJbJ0NvbnRlbnQtbGVuZ3RoJ10udG9faQorCQlo dHRwX2Vycm9yKDQwNSwgIk1ldGhvZCBOb3QgQWxsb3dlZCIpIHVubGVzcyBAYXAucmVxdWVz dF9tZXRob2QgID09ICJQT1NUIgorCQlodHRwX2Vycm9yKDQwMCwgIkJhZCBSZXF1ZXN0Iikg ICAgICAgIHVubGVzcyBwYXJzZV9jb250ZW50X3R5cGUoaGVhZGVyWydDb250ZW50LXR5cGUn XSkuZmlyc3QgPT0gInRleHQveG1sIgorCQlodHRwX2Vycm9yKDQxMSwgIkxlbmd0aCBSZXF1 aXJlZCIpICAgIHVubGVzcyBsZW5ndGggPiAwCiAKLSAgICAgIGh0dHBfZXJyb3IoNDA1LCAi TWV0aG9kIE5vdCBBbGxvd2VkIikgdW5sZXNzIEBhcC5yZXF1ZXN0X21ldGhvZCAgPT0gIlBP U1QiIAotICAgICAgaHR0cF9lcnJvcig0MDAsICJCYWQgUmVxdWVzdCIpICAgICAgICB1bmxl c3MgcGFyc2VfY29udGVudF90eXBlKGhlYWRlclsnQ29udGVudC10eXBlJ10pLmZpcnN0ID09 ICJ0ZXh0L3htbCIKLSAgICAgIGh0dHBfZXJyb3IoNDExLCAiTGVuZ3RoIFJlcXVpcmVkIikg ICAgdW5sZXNzIGxlbmd0aCA+IDAgCisJCUBhcC5iaW5tb2RlCisJCWRhdGEgPSBhcGFjaGVf cmVxdWVzdC5yZWFkKGxlbmd0aCkKIAotICAgICAgIyBUT0RPOiBkbyB3ZSBuZWVkIGEgY2Fs bCB0byBiaW5tb2RlPwotICAgICAgQGFwLmJpbm1vZGUKLSAgICAgIGRhdGEgPSBAYXAucmVh ZChsZW5ndGgpCisJCWh0dHBfZXJyb3IoNDAwLCAiQmFkIFJlcXVpZXN0IikgaWYgZGF0YS5u aWw/IG9yIGRhdGEuc2l6ZSAhPSBsZW5ndGgKIAotICAgICAgaHR0cF9lcnJvcig0MDAsICJC YWQgUmVxdWVzdCIpICAgICAgICBpZiBkYXRhLm5pbD8gb3IgZGF0YS5zaXplICE9IGxlbmd0 aAorCQlodHRwX3dyaXRlKHByb2Nlc3MoZGF0YSksIDIwMCwgIkNvbnRlbnQtdHlwZSIgPT4g InRleHQveG1sOyBjaGFyc2V0PXV0Zi04IikKIAotICAgICAgaHR0cF93cml0ZShwcm9jZXNz KGRhdGEpLCAyMDAsICJDb250ZW50LXR5cGUiID0+ICJ0ZXh0L3htbDsgY2hhcnNldD11dGYt OCIpCi0gICAgfQotICBlbmQKLQotCisJCXJldHVybiBBcGFjaGU6Ok9LCisJZW5kCiAgIHBy aXZhdGUKIAogICBkZWYgaHR0cF9lcnJvcihzdGF0dXMsIG1lc3NhZ2UpCg== -------91821c1e1a5bb0a3a27dd49d26d1a794--