From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 16992 invoked from network); 9 Oct 2020 21:22:36 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 9 Oct 2020 21:22:36 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20200801; t=1602278556; b=EGDzscYGWIEbk7hJ675FBQTCUJV0gnk83A2AFvBNtE5u8KE1uGGIrS90SZtNRmqA2CRlsIuT7u WW/9W4MxnC1gzI8kcYgMaIdBuds12BuMwRrPRmljz39YU5z+LCLbFZfUvWxsHYsYPZGQ0g02H0 WSCWWda0LinlX2V/bThO/6jZNXzV+nc0lJIbB+0psCzlSbh+LS9JecKvpx+UAfchXTqiYNUfxV YpMP+6joFf4+GrTwUMJZWXDgxdButPXBQTdenkIiHnxdr2o8GDNj4E2Cuz+76xzfKi+NSIo+Ef jc/R6O+K8aYBOWb1AqSmu9zrJLa9vQOZYkkiLPpAUfgM5w==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-io1-f46.google.com) smtp.remote-ip=209.85.166.46; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20200801; t=1602278556; bh=mhoUvhCHi2Vq0zPun4a1ZaezZDc1Paz67J09dA89OI0=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:DKIM-Signature:DKIM-Signature; b=XHv66VbbMN7iC2RgI4WXN0bxugzIkvacRk0d/14x3dHkX7hn+BuhLmbPpA4MFdlpBUnTWNbdmf LNj8QVhTszYhk+w+eK3tBUoXYb8nhn+m3P9CuchujXWWbyilNb42dAlUCM4R2esrb3XzErTcJh BH3EB0vxFHSlg/53BzVcL88jW1appKY5ZJ/CPLecgogH5XeLkjgheK92FPw3Bxa1YMxMrWz442 J3hZTqWDgCTE9sOVLnh/vDrX1IgziaY6mmqnnoHIrngykQ2rXUXW/cCvWZIisoBKv9UmR57Npn mNp/PHzqxFXXMEb3wJSeoCtNOfNEt552CC6x6Aok9xv9sw==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:To:Subject:Message-ID: Date:From:In-Reply-To:References:MIME-Version:Reply-To:Cc: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=mhoUvhCHi2Vq0zPun4a1ZaezZDc1Paz67J09dA89OI0=; b=w9Ow6bEE/NaoJZxRueUFZgqRxc jwB2qdewQPHQ/1lW8Qpk+KGLpVnvTzkk2CaZJrXs0FPoe2+fMsfpZ0VFXPcNxCC8t0w4QJme8dPrQ eMnYoRxsrU5jlh5msWAOxnpzn/jsVFyEgQJMWCKc2GeRDhFPerRTlH41hG5cfgkMoFHUO31ok3wv6 8MiIjUJ3HRT+h4hiYHEzRS+qqDolLOWENRn+w+d25Jb0NZyIlCeXNMZlcis3/3VBAej2i739+EuH4 //tTSzWBHs393c9n1Ajbjs2WjzQsEDalJ9nPxe7vVoAYrxo4eavCCggLlJNbcjvcsnK5nkaApNBJN 4IiQFM9g==; Received: from authenticated user by zero.zsh.org with local id 1kQzqT-000Jqx-1w; Fri, 09 Oct 2020 21:22:33 +0000 Authentication-Results: zsh.org; iprev=pass (mail-io1-f46.google.com) smtp.remote-ip=209.85.166.46; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-io1-f46.google.com ([209.85.166.46]:38976) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1kQzq9-000JhA-51; Fri, 09 Oct 2020 21:22:13 +0000 Received: by mail-io1-f46.google.com with SMTP id q9so11659303iow.6 for ; Fri, 09 Oct 2020 14:22:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=mhoUvhCHi2Vq0zPun4a1ZaezZDc1Paz67J09dA89OI0=; b=PpkLSFmFgUmwCZ0XfzKGJqVQNY2TxHtULkRxmDs8w/huafu9Joa/DBJZATN9hD+BuG c2azkXGnYckC0VVnGnCWo7ddmbbDBYfvICYbjSbRKDVxIHK2UHl31/N+KaRLjzgaOQad YO5uB05eKdJyb8CNVE1Alh+m3z6aqul++p35COiNeFRPHJDjVlunNDPFL4gJ2Qp9S3i/ Jt+DPFpiTYmGcdt6ATHJjYwGTt/qQAtYNE2wTauV4j5yhXrDp3OizIpvAnTUctRI2BiH oM41lC9YTTsSkX3LWkHo2UoNksoUUON1mawc5Qnkx42h/LDgmq5OBlioDcetTg/3BFbj 3gOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=mhoUvhCHi2Vq0zPun4a1ZaezZDc1Paz67J09dA89OI0=; b=aRult1cPf/ticiqltCHEY+UM6Fw77eFmFZEpjciAv2eQ75PGesGoj09bLm6PjMBsci 86DZBF1Z2wp3Amea1JyFjbDj/yNwvGdXYg3IY1h9AQoLtyxavkajihAHkdE67MgNUcO5 vq7BAKDFFJA8XeNsryhAheB5qk52PsmOkmNDhFO3g70HJnW2AYMmJnrfvk0+cCgXUclr IFtj/SBiTmEfwB1w7TRRzdIc8MUXZEJIR777Aw8FXSvuQsEcOj6HVtrpoNQNWMXcQ+ai Wl7ExroTLApJ7O6VHTdpXkxvG9b76zMBRhP2MmYQYvtGF7iu2zgetnXBmhRqC9b9jkgE +yBw== X-Gm-Message-State: AOAM533PFH5/FhFqI+oS/gzcjKcwdgRplM1IYCJwpMCulI0FF5Dm8VCd pH4L/7TGbjbUzOOevWP4Kj1TsFAcP4jcmshFcSnX/uuQtck= X-Google-Smtp-Source: ABdhPJxL4DByWWX3BF1G7e27htjqRcZZ9VYgWnrOoM9ocIohCQw2nF7cE9HEtBj+K+hdAQYCNMNsfdWaUAXXykFV4Rc= X-Received: by 2002:a5d:8755:: with SMTP id k21mr10949644iol.142.1602278531634; Fri, 09 Oct 2020 14:22:11 -0700 (PDT) MIME-Version: 1.0 References: <20201009200737.GA78914@CptOrmolo.darkstar> <20201009205357.GA6449@CptOrmolo.darkstar> In-Reply-To: <20201009205357.GA6449@CptOrmolo.darkstar> From: Roman Perepelitsa Date: Fri, 9 Oct 2020 23:22:00 +0200 Message-ID: Subject: Re: [patch] Avoid race in zf_mkdir To: Zsh hackers list Content-Type: multipart/mixed; boundary="000000000000b5bf0205b1438a2b" X-Seq: 47441 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: --000000000000b5bf0205b1438a2b Content-Type: text/plain; charset="UTF-8" Perhaps something like this? This should provide the following guarantees for zf_mkdir -p: - If it succeeds, the directory must have existed at some point during the execution of the function (either created by zf_mkdir itself or by some other concurrent process). - If it fails, there must have been a point in time during the execution of the function where the target directory or one of its parents didn't exist and it was impossible to create it. `zf_mkdir -p foo` It should work as expected in the face of concurrent `mkdir foo && rmdir foo` or `touch foo && rm foo`. I confess that I haven't tested it. Roman. --000000000000b5bf0205b1438a2b Content-Type: text/plain; charset="US-ASCII"; name="mkdir-patch.txt" Content-Disposition: attachment; filename="mkdir-patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kg2r3f250 ZGlmZiAtLWdpdCBhL1NyYy9Nb2R1bGVzL2ZpbGVzLmMgYi9TcmMvTW9kdWxlcy9maWxlcy5jCmlu ZGV4IDZkMjBlMzhhOC4uYTljY2NjYjhiIDEwMDY0NAotLS0gYS9TcmMvTW9kdWxlcy9maWxlcy5j CisrKyBiL1NyYy9Nb2R1bGVzL2ZpbGVzLmMKQEAgLTEyMiwxOSArMTIyLDI4IEBAIGRvbWtkaXIo Y2hhciAqbmFtLCBjaGFyICpwYXRoLCBtb2RlX3QgbW9kZSwgaW50IHApCiB7CiAgICAgaW50IGVy cjsKICAgICBtb2RlX3Qgb3VtYXNrOworICAgIHN0cnVjdCBzdGF0IHN0OwogICAgIGNoYXIgY29u c3QgKnJwYXRoID0gdW5tZXRhKHBhdGgpOwogCi0gICAgaWYocCkgewotCXN0cnVjdCBzdGF0IHN0 OwotCi0JaWYoIXN0YXQocnBhdGgsICZzdCkgJiYgU19JU0RJUihzdC5zdF9tb2RlKSkKKyAgICB3 aGlsZSgxKSB7CisJb3VtYXNrID0gdW1hc2soMCk7CisJZXJyID0gbWtkaXIocnBhdGgsIG1vZGUp ID8gZXJybm8gOiAwOworCXVtYXNrKG91bWFzayk7CisJaWYgKCFlcnIpCisJICAgIHJldHVybiAw OworCWlmKCFwIHx8IGVyciAhPSBFRVhJU1QpCisJICAgIGJyZWFrOworCWlmKCFzdGF0KHJwYXRo LCAmc3QpKSB7CisJICAgIGlmKGVycm5vID09IEVOT0VOVCkKKwkJY29udGludWU7CisJICAgIGVy ciA9IGVycm5vOworCSAgICBicmVhazsKKwl9CisJaWYoU19JU0RJUihzdC5zdF9tb2RlKSkKIAkg ICAgcmV0dXJuIDA7CisJYnJlYWs7CiAgICAgfQotICAgIG91bWFzayA9IHVtYXNrKDApOwotICAg IGVyciA9IG1rZGlyKHJwYXRoLCBtb2RlKSA/IGVycm5vIDogMDsKLSAgICB1bWFzayhvdW1hc2sp OwotICAgIGlmKCFlcnIpCi0JcmV0dXJuIDA7CisKICAgICB6d2Fybm5hbShuYW0sICJjYW5ub3Qg bWFrZSBkaXJlY3RvcnkgYCVzJzogJWUiLCBwYXRoLCBlcnIpOwogICAgIHJldHVybiAxOwogfQo= --000000000000b5bf0205b1438a2b--