Return-Path: X-Original-To: notmuch@notmuchmail.org Delivered-To: notmuch@notmuchmail.org Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id A5895429E26 for ; Mon, 12 Dec 2011 06:57:28 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none] autolearn=disabled Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 7gXfyHGNQW0i for ; Mon, 12 Dec 2011 06:57:28 -0800 (PST) Received: from mail-gw3.nixu.fi (mail-gw3.nixu.fi [193.209.237.7]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id AD64F429E25 for ; Mon, 12 Dec 2011 06:57:27 -0800 (PST) Received: from pps.filterd (mail-gw3 [127.0.0.1]) by mail-gw3.nixu.fi (8.14.4/8.14.4) with SMTP id pBCEuBH0012313 for ; Mon, 12 Dec 2011 16:57:23 +0200 Received: from taco2.nixu.fi (taco2.nixu.fi [194.197.118.31]) by mail-gw3.nixu.fi with ESMTP id 114cs0suua-1 (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NOT) for ; Mon, 12 Dec 2011 16:57:23 +0200 Received: from taco2.nixu.fi (taco2.nixu.fi [194.197.118.31]) by taco2.nixu.fi (8.14.3/8.14.3/Debian-5+lenny1) with ESMTP id pBCEvLvd024581 for ; Mon, 12 Dec 2011 16:57:22 +0200 From: Tomi Ollila To: Subject: [PATCH] test/smtp-dummy: add --background option for backgrounding after listen(2) User-Agent: Notmuch/0.10.2+93~g631d290 (http://notmuchmail.org) Emacs/23.3.1 (i686-pc-linux-gnu) X-Face: HhBM'cA~ MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.5.7110, 1.0.211, 0.0.0000 definitions=2011-12-12_02:2011-12-12, 2011-12-12, 1970-01-01 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 ipscore=0 suspectscore=1 phishscore=0 bulkscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=6.0.2-1012030000 definitions=main-1112120114 X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Dec 2011 14:57:28 -0000 To avoid the possibility that smtp-dummy doesn't have chance to listen its bound socket until something tries to send message to it this option can be used for caller to wait until socket is already listening for a connection. --- When test_require_external_prereq() is changed to use associative array to check whether prereq is missing bash script is often so fast that it already waiting for smtp-dummy to exit until socket is listening. i.e sending QUIT to 127.0.0.1:25025 fails since there is no listener. (fork(2) & execve(2) count goes to zero in test_require_external_prereq (from 3 fork()s, 2 execve()s). test/smtp-dummy.c | 28 +++++++++++++++++++++++++++- 1 files changed, 27 insertions(+), 1 deletions(-) diff --git a/test/smtp-dummy.c b/test/smtp-dummy.c index 3801a5e..40196dd 100644 --- a/test/smtp-dummy.c +++ b/test/smtp-dummy.c @@ -124,9 +124,21 @@ main (int argc, char *argv[]) struct hostent *hostinfo; socklen_t peer_addr_len; int reuse; + int bg; + + /* XXX quick implementation -- fix if more functionality is desired. */ + if (argc >= 2 && strcmp(argv[1], "--background") == 0) { + argc--; + argv[1] = argv[0]; + argv++; + bg = 1; + } + else + bg = 0; if (argc != 2) { - fprintf (stderr, "Usage: %s \n", argv[0]); + fprintf (stderr, "Usage: %s [--background] \n", + argv[0]); return 1; } @@ -179,6 +191,20 @@ main (int argc, char *argv[]) return 1; } + if (bg) { + switch (fork ()) { + case 0: + break; + case -1: + fprintf (stderr, "Error: fork() failed: %s\n", + strerror (errno)); + close (sock); + return 1; + default: + return 0; + } + } + peer_addr_len = sizeof (peer_addr); peer = accept (sock, (struct sockaddr *) &peer_addr, &peer_addr_len); if (peer == -1) { -- 1.7.7.3