Return-Path: Delivered-To: apmail-apr-dev-archive@www.apache.org Received: (qmail 74577 invoked from network); 19 Sep 2009 22:11:39 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 19 Sep 2009 22:11:39 -0000 Received: (qmail 99499 invoked by uid 500); 19 Sep 2009 22:11:39 -0000 Delivered-To: apmail-apr-dev-archive@apr.apache.org Received: (qmail 99412 invoked by uid 500); 19 Sep 2009 22:11:38 -0000 Mailing-List: contact dev-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Id: Delivered-To: mailing list dev@apr.apache.org Delivered-To: moderator for dev@apr.apache.org Received: (qmail 16109 invoked by uid 99); 19 Sep 2009 18:25:54 -0000 X-ASF-Spam-Status: No, hits=-4.0 required=10.0 tests=RCVD_IN_DNSWL_MED,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of nrc@eecs.berkeley.edu designates 169.229.60.87 as permitted sender) MIME-Version: 1.0 In-Reply-To: <4AB51033.20808@sharp.fm> References: <003e01ca35ae$5c83e5d0$158bb170$@edu.cn> <4AB51033.20808@sharp.fm> Date: Sat, 19 Sep 2009 11:25:18 -0700 Message-ID: Subject: Re: apr_hash: Memory consumption From: Neil Conway To: APR Development Content-Type: multipart/mixed; boundary=00c09f971feef03cbb0473f25e5c X-Virus-Checked: Checked by ClamAV on apache.org --00c09f971feef03cbb0473f25e5c Content-Type: text/plain; charset=ISO-8859-1 On Sat, Sep 19, 2009 at 10:09 AM, Graham Leggett wrote: > Hmmm. I think it's reasonable to return NULL in the failure cases, where > NULL means "out of memory". Fair enough. The one place this doesn't work is when expanding the bucket array in apr_hash_set() (since it returns NULL), but in that case we can just skip the expansion if the apr_pool_create() fails, and retry it next time. Attached is a revised patch -- thanks for the feedback. Neil --00c09f971feef03cbb0473f25e5c Content-Type: application/octet-stream; name="apr_hash_mem_leak-2.patch" Content-Disposition: attachment; filename="apr_hash_mem_leak-2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fzsow6jv0 SW5kZXg6IHRhYmxlcy9hcHJfaGFzaC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRhYmxlcy9hcHJfaGFzaC5j CShyZXZpc2lvbiA4MTY4MTMpCisrKyB0YWJsZXMvYXByX2hhc2guYwkod29ya2luZyBjb3B5KQpA QCAtNjcsMTIgKzY3LDE1IEBACiAvKgogICogVGhlIHNpemUgb2YgdGhlIGFycmF5IGlzIGFsd2F5 cyBhIHBvd2VyIG9mIHR3by4gV2UgdXNlIHRoZSBtYXhpbXVtCiAgKiBpbmRleCByYXRoZXIgdGhh biB0aGUgc2l6ZSBzbyB0aGF0IHdlIGNhbiB1c2UgYml0d2lzZS1BTkQgZm9yCi0gKiBtb2R1bGFy IGFyaXRobWV0aWMuCi0gKiBUaGUgY291bnQgb2YgaGFzaCBlbnRyaWVzIG1heSBiZSBncmVhdGVy IGRlcGVuZGluZyBvbiB0aGUgY2hvc2VuCi0gKiBjb2xsaXNpb24gcmF0ZS4KKyAqIG1vZHVsYXIg YXJpdGhtZXRpYy4gVGhlIGNvdW50IG9mIGhhc2ggZW50cmllcyBtYXkgYmUgZ3JlYXRlcgorICog ZGVwZW5kaW5nIG9uIHRoZSBjaG9zZW4gY29sbGlzaW9uIHJhdGUuCisgKgorICogV2UgYWxsb2Nh dGUgdGhlIGJ1Y2tldCBhcnJheSBpbiBhIHN1Yi1wb29sLCAiYXJyYXlfcG9vbCIuIFRoaXMgYWxs b3dzIHVzCisgKiB0byByZWNsYWltIHRoZSBvbGQgYnVja2V0IGFycmF5IGFmdGVyIGFuIGV4cGFu c2lvbi4KICAqLwogc3RydWN0IGFwcl9oYXNoX3QgewogICAgIGFwcl9wb29sX3QgICAgICAgICAg KnBvb2w7CisgICAgYXByX3Bvb2xfdCAgICAgICAgICAqYXJyYXlfcG9vbDsKICAgICBhcHJfaGFz aF9lbnRyeV90ICAgKiphcnJheTsKICAgICBhcHJfaGFzaF9pbmRleF90ICAgICBpdGVyYXRvcjsg IC8qIEZvciBhcHJfaGFzaF9maXJzdChOVUxMLCAuLi4pICovCiAgICAgdW5zaWduZWQgaW50ICAg ICAgICAgY291bnQsIG1heDsKQEAgLTg5LDE0ICs5MiwyMCBAQAogCiBzdGF0aWMgYXByX2hhc2hf ZW50cnlfdCAqKmFsbG9jX2FycmF5KGFwcl9oYXNoX3QgKmh0LCB1bnNpZ25lZCBpbnQgbWF4KQog ewotICAgcmV0dXJuIGFwcl9wY2FsbG9jKGh0LT5wb29sLCBzaXplb2YoKmh0LT5hcnJheSkgKiAo bWF4ICsgMSkpOworICAgcmV0dXJuIGFwcl9wY2FsbG9jKGh0LT5hcnJheV9wb29sLCBzaXplb2Yo Kmh0LT5hcnJheSkgKiAobWF4ICsgMSkpOwogfQogCiBBUFJfREVDTEFSRShhcHJfaGFzaF90ICop IGFwcl9oYXNoX21ha2UoYXByX3Bvb2xfdCAqcG9vbCkKIHsKKyAgICBhcHJfcG9vbF90ICphcnJh eV9wb29sOwogICAgIGFwcl9oYXNoX3QgKmh0OworCisgICAgaWYgKGFwcl9wb29sX2NyZWF0ZSgm YXJyYXlfcG9vbCwgcG9vbCkgIT0gQVBSX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBOVUxMOwor CiAgICAgaHQgPSBhcHJfcGFsbG9jKHBvb2wsIHNpemVvZihhcHJfaGFzaF90KSk7CiAgICAgaHQt PnBvb2wgPSBwb29sOworICAgIGh0LT5hcnJheV9wb29sID0gYXJyYXlfcG9vbDsKICAgICBodC0+ ZnJlZSA9IE5VTEw7CiAgICAgaHQtPmNvdW50ID0gMDsKICAgICBodC0+bWF4ID0gSU5JVElBTF9N QVg7CkBAIC0xNjMsMTAgKzE3MiwxNyBAQAogCiBzdGF0aWMgdm9pZCBleHBhbmRfYXJyYXkoYXBy X2hhc2hfdCAqaHQpCiB7CisgICAgYXByX3Bvb2xfdCAqbmV3X2FycmF5X3Bvb2w7CisgICAgYXBy X3Bvb2xfdCAqb2xkX2FycmF5X3Bvb2w7CiAgICAgYXByX2hhc2hfaW5kZXhfdCAqaGk7CiAgICAg YXByX2hhc2hfZW50cnlfdCAqKm5ld19hcnJheTsKICAgICB1bnNpZ25lZCBpbnQgbmV3X21heDsK IAorICAgIGlmIChhcHJfcG9vbF9jcmVhdGUoJm5ld19hcnJheV9wb29sLCBodC0+cG9vbCkgIT0g QVBSX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsgLyogR2l2ZSB1cCBhbmQgZG9uJ3QgdHJ5IHRv IGV4cGFuZCB0aGUgYXJyYXkgKi8KKyAgICBvbGRfYXJyYXlfcG9vbCA9IGh0LT5hcnJheV9wb29s OworICAgIGh0LT5hcnJheV9wb29sID0gbmV3X2FycmF5X3Bvb2w7CisKICAgICBuZXdfbWF4ID0g aHQtPm1heCAqIDIgKyAxOwogICAgIG5ld19hcnJheSA9IGFsbG9jX2FycmF5KGh0LCBuZXdfbWF4 KTsKICAgICBmb3IgKGhpID0gYXByX2hhc2hfZmlyc3QoTlVMTCwgaHQpOyBoaTsgaGkgPSBhcHJf aGFzaF9uZXh0KGhpKSkgewpAQCAtMTc2LDYgKzE5Miw4IEBACiAgICAgfQogICAgIGh0LT5hcnJh eSA9IG5ld19hcnJheTsKICAgICBodC0+bWF4ID0gbmV3X21heDsKKworICAgIGFwcl9wb29sX2Rl c3Ryb3kob2xkX2FycmF5X3Bvb2wpOwogfQogCiBBUFJfREVDTEFSRV9OT05TVEQodW5zaWduZWQg aW50KSBhcHJfaGFzaGZ1bmNfZGVmYXVsdChjb25zdCBjaGFyICpjaGFyX2tleSwKQEAgLTI4OCwy MiArMzA2LDI1IEBACiBBUFJfREVDTEFSRShhcHJfaGFzaF90ICopIGFwcl9oYXNoX2NvcHkoYXBy X3Bvb2xfdCAqcG9vbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBhcHJfaGFzaF90ICpvcmlnKQogeworICAgIGFwcl9wb29sX3QgKmFycmF5X3Bvb2w7CiAg ICAgYXByX2hhc2hfdCAqaHQ7CiAgICAgYXByX2hhc2hfZW50cnlfdCAqbmV3X3ZhbHM7CiAgICAg dW5zaWduZWQgaW50IGksIGo7CiAKKyAgICBpZiAoYXByX3Bvb2xfY3JlYXRlKCZhcnJheV9wb29s LCBodC0+cG9vbCkgIT0gQVBSX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAg aHQgPSBhcHJfcGFsbG9jKHBvb2wsIHNpemVvZihhcHJfaGFzaF90KSArCi0gICAgICAgICAgICAg ICAgICAgIHNpemVvZigqaHQtPmFycmF5KSAqIChvcmlnLT5tYXggKyAxKSArCiAgICAgICAgICAg ICAgICAgICAgIHNpemVvZihhcHJfaGFzaF9lbnRyeV90KSAqIG9yaWctPmNvdW50KTsKICAgICBo dC0+cG9vbCA9IHBvb2w7CisgICAgaHQtPmFycmF5X3Bvb2wgPSBhcnJheV9wb29sOwogICAgIGh0 LT5mcmVlID0gTlVMTDsKICAgICBodC0+Y291bnQgPSBvcmlnLT5jb3VudDsKICAgICBodC0+bWF4 ID0gb3JpZy0+bWF4OwogICAgIGh0LT5oYXNoX2Z1bmMgPSBvcmlnLT5oYXNoX2Z1bmM7Ci0gICAg aHQtPmFycmF5ID0gKGFwcl9oYXNoX2VudHJ5X3QgKiopKChjaGFyICopaHQgKyBzaXplb2YoYXBy X2hhc2hfdCkpOworICAgIGh0LT5hcnJheSA9IGFsbG9jX2FycmF5KGh0LCBodC0+bWF4KTsKIAot ICAgIG5ld192YWxzID0gKGFwcl9oYXNoX2VudHJ5X3QgKikoKGNoYXIgKikoaHQpICsgc2l6ZW9m KGFwcl9oYXNoX3QpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVv ZigqaHQtPmFycmF5KSAqIChvcmlnLT5tYXggKyAxKSk7CisgICAgbmV3X3ZhbHMgPSAoYXByX2hh c2hfZW50cnlfdCAqKSgoY2hhciAqKShodCkgKyBzaXplb2YoYXByX2hhc2hfdCkpOwogICAgIGog PSAwOwogICAgIGZvciAoaSA9IDA7IGkgPD0gaHQtPm1heDsgaSsrKSB7CiAgICAgICAgIGFwcl9o YXNoX2VudHJ5X3QgKipuZXdfZW50cnkgPSAmKGh0LT5hcnJheVtpXSk7CkBAIC0zOTIsNiArNDEz LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgdm9pZCAqZGF0YSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHZvaWQgKmRhdGEpCiB7CisgICAgYXByX3Bvb2xfdCAqYXJyYXlfcG9vbDsK ICAgICBhcHJfaGFzaF90ICpyZXM7CiAgICAgYXByX2hhc2hfZW50cnlfdCAqbmV3X3ZhbHMgPSBO VUxMOwogICAgIGFwcl9oYXNoX2VudHJ5X3QgKml0ZXI7CkBAIC00MTUsOCArNDM3LDEyIEBACiAg ICAgfQogI2VuZGlmCiAKKyAgICBpZiAoYXByX3Bvb2xfY3JlYXRlKCZhcnJheV9wb29sLCBwKSAh PSBBUFJfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICByZXMgPSBhcHJfcGFs bG9jKHAsIHNpemVvZihhcHJfaGFzaF90KSk7CiAgICAgcmVzLT5wb29sID0gcDsKKyAgICByZXMt PmFycmF5X3Bvb2wgPSBhcnJheV9wb29sOwogICAgIHJlcy0+ZnJlZSA9IE5VTEw7CiAgICAgcmVz LT5oYXNoX2Z1bmMgPSBiYXNlLT5oYXNoX2Z1bmM7CiAgICAgcmVzLT5jb3VudCA9IGJhc2UtPmNv dW50OwpJbmRleDogaW5jbHVkZS9hcHJfaGFzaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluY2x1ZGUvYXBy X2hhc2guaAkocmV2aXNpb24gODE2ODEzKQorKysgaW5jbHVkZS9hcHJfaGFzaC5oCSh3b3JraW5n IGNvcHkpCkBAIC03Myw3ICs3Myw3IEBACiAvKioKICAqIENyZWF0ZSBhIGhhc2ggdGFibGUuCiAg KiBAcGFyYW0gcG9vbCBUaGUgcG9vbCB0byBhbGxvY2F0ZSB0aGUgaGFzaCB0YWJsZSBvdXQgb2YK LSAqIEByZXR1cm4gVGhlIGhhc2ggdGFibGUganVzdCBjcmVhdGVkCisgKiBAcmV0dXJuIFRoZSBo YXNoIHRhYmxlIGp1c3QgY3JlYXRlZCwgb3IgTlVMTCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWls ZWQKICAgKi8KIEFQUl9ERUNMQVJFKGFwcl9oYXNoX3QgKikgYXByX2hhc2hfbWFrZShhcHJfcG9v bF90ICpwb29sKTsKIApAQCAtODEsNyArODEsNyBAQAogICogQ3JlYXRlIGEgaGFzaCB0YWJsZSB3 aXRoIGEgY3VzdG9tIGhhc2ggZnVuY3Rpb24KICAqIEBwYXJhbSBwb29sIFRoZSBwb29sIHRvIGFs bG9jYXRlIHRoZSBoYXNoIHRhYmxlIG91dCBvZgogICogQHBhcmFtIGhhc2hfZnVuYyBBIGN1c3Rv bSBoYXNoIGZ1bmN0aW9uLgotICogQHJldHVybiBUaGUgaGFzaCB0YWJsZSBqdXN0IGNyZWF0ZWQK KyAqIEByZXR1cm4gVGhlIGhhc2ggdGFibGUganVzdCBjcmVhdGVkLCBvciBOVUxMIGlmIG1lbW9y eSBhbGxvY2F0aW9uIGZhaWxlZAogICAqLwogQVBSX0RFQ0xBUkUoYXByX2hhc2hfdCAqKSBhcHJf aGFzaF9tYWtlX2N1c3RvbShhcHJfcG9vbF90ICpwb29sLCAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX2hhc2hmdW5jX3QgaGFzaF9mdW5jKTsKQEAg LTkwLDcgKzkwLDcgQEAKICAqIE1ha2UgYSBjb3B5IG9mIGEgaGFzaCB0YWJsZQogICogQHBhcmFt IHBvb2wgVGhlIHBvb2wgZnJvbSB3aGljaCB0byBhbGxvY2F0ZSB0aGUgbmV3IGhhc2ggdGFibGUK ICAqIEBwYXJhbSBoIFRoZSBoYXNoIHRhYmxlIHRvIGNsb25lCi0gKiBAcmV0dXJuIFRoZSBoYXNo IHRhYmxlIGp1c3QgY3JlYXRlZAorICogQHJldHVybiBUaGUgaGFzaCB0YWJsZSBqdXN0IGNyZWF0 ZWQsIG9yIE5VTEwgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCiAgKiBAcmVtYXJrIE1ha2Vz IGEgc2hhbGxvdyBjb3B5CiAgKi8KIEFQUl9ERUNMQVJFKGFwcl9oYXNoX3QgKikgYXByX2hhc2hf Y29weShhcHJfcG9vbF90ICpwb29sLApAQCAtMTg3LDcgKzE4Nyw4IEBACiAgKiBAcGFyYW0gcCBU aGUgcG9vbCB0byB1c2UgZm9yIHRoZSBuZXcgaGFzaCB0YWJsZQogICogQHBhcmFtIG92ZXJsYXkg VGhlIHRhYmxlIHRvIGFkZCB0byB0aGUgaW5pdGlhbCB0YWJsZQogICogQHBhcmFtIGJhc2UgVGhl IHRhYmxlIHRoYXQgcmVwcmVzZW50cyB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIG5ldyB0YWJs ZQotICogQHJldHVybiBBIG5ldyBoYXNoIHRhYmxlIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBkYXRh IGZyb20gdGhlIHR3byBwYXNzZWQgaW4KKyAqIEByZXR1cm4gQSBuZXcgaGFzaCB0YWJsZSBjb250 YWluaW5nIGFsbCBvZiB0aGUgZGF0YSBmcm9tIHRoZSB0d28gcGFzc2VkIGluLAorICogICAgICAg ICBvciBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAogICovCiBBUFJfREVDTEFSRShh cHJfaGFzaF90ICopIGFwcl9oYXNoX292ZXJsYXkoYXByX3Bvb2xfdCAqcCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHJfaGFzaF90ICpvdmVybGF5 LCAKQEAgLTIwNSw3ICsyMDYsOCBAQAogICogIG1ha2UgdmFsdWVzIGZyb20gaDEgb3ZlcnJpZGUg dmFsdWVzIGZyb20gaDIgKHNhbWUgc2VtYW50aWNzIGFzCiAgKiAgYXByX2hhc2hfb3ZlcmxheSgp KQogICogQHBhcmFtIGRhdGEgQ2xpZW50IGRhdGEgdG8gcGFzcyB0byB0aGUgbWVyZ2VyIGZ1bmN0 aW9uCi0gKiBAcmV0dXJuIEEgbmV3IGhhc2ggdGFibGUgY29udGFpbmluZyBhbGwgb2YgdGhlIGRh dGEgZnJvbSB0aGUgdHdvIHBhc3NlZCBpbgorICogQHJldHVybiBBIG5ldyBoYXNoIHRhYmxlIGNv bnRhaW5pbmcgYWxsIG9mIHRoZSBkYXRhIGZyb20gdGhlIHR3byBwYXNzZWQgaW4sCisgKiAgICAg ICAgIG9yIE5VTEwgaWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLgogICovCiBBUFJfREVDTEFS RShhcHJfaGFzaF90ICopIGFwcl9oYXNoX21lcmdlKGFwcl9wb29sX3QgKnAsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcl9oYXNoX3QgKmgxLAo= --00c09f971feef03cbb0473f25e5c--