From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) by sourceware.org (Postfix) with ESMTPS id 4CBB8388E834 for ; Mon, 21 Jun 2021 07:42:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4CBB8388E834 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=denx.de Received: from ktm (85-222-111-42.dynamic.chello.pl [85.222.111.42]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: lukma@denx.de) by phobos.denx.de (Postfix) with ESMTPSA id D47648291E; Mon, 21 Jun 2021 09:42:39 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1624261360; bh=7He7tju8reSVDphxQw4MKqx3P6mfdp+2MrizkUyeu5o=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=ojtWGNMEmycu9NGigEMYDf1F4zOE5Yk6y8KEHmv9uvDlMMuiFdbwxM6OpnDvHPJO0 10LBnNFzh+P9GHHnt86xZCVYO10mAmj86UInw+8/52lI3YuwRxra38wfixMxFVJXGi nzEzUdyXoQTqQklglcU1kzjn/y9x0pSB8DNttaSRpomuSOVilMx7myBtffvC17oYYm kb7EdvD8WkyKQEivHIQj0AHDjaxXzYxY4B8sHw18ynwGPjt7o1iVu7IFCHCGOonG5g pCCK69TSM/vQVLoYjU5Ob51e+cwSa9yRJ2X0n0trZzYIS4x0WfEMnUr8frB3enGZYU dno8LNUPoRQgg== Date: Mon, 21 Jun 2021 09:42:38 +0200 From: Lukasz Majewski To: Adhemerval Zanella Cc: libc-alpha@sourceware.org, Carlos O'Donell Subject: Re: [PATCH 03/18] support: Add support_create_timer Message-ID: <20210621094238.7246b9a5@ktm> In-Reply-To: <20210617115104.1359598-4-adhemerval.zanella@linaro.org> References: <20210617115104.1359598-1-adhemerval.zanella@linaro.org> <20210617115104.1359598-4-adhemerval.zanella@linaro.org> Organization: denx.de X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; boundary="Sig_/T_oAlJw_6bOSIHWy2+lpbbR"; protocol="application/pgp-signature" X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de X-Virus-Status: Clean X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Jun 2021 07:42:43 -0000 --Sig_/T_oAlJw_6bOSIHWy2+lpbbR Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Thu, 17 Jun 2021 08:50:49 -0300 Adhemerval Zanella wrote: > It is a simple wrapper over timer_create, timer_settime, and > sigaction. It will be used to check for large timeout to trigger an > EINTR. > --- > support/Makefile | 1 + > support/support.h | 11 ++++++ > support/support_create_timer.c | 69 > ++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) > create mode 100644 support/support_create_timer.c >=20 > diff --git a/support/Makefile b/support/Makefile > index f3ebaa8d2e..278f4627d8 100644 > --- a/support/Makefile > +++ b/support/Makefile > @@ -50,6 +50,7 @@ libsupport-routines =3D \ > support_chroot \ > support_copy_file \ > support_copy_file_range \ > + support_create_timer \ > support_descriptor_supports_holes \ > support_descriptors \ > support_enter_mount_namespace \ > diff --git a/support/support.h b/support/support.h > index 874204b7fc..9ec8ecb8d7 100644 > --- a/support/support.h > +++ b/support/support.h > @@ -24,6 +24,7 @@ > #define SUPPORT_H > =20 > #include > +#include > #include > #include > /* For mode_t. */ > @@ -153,6 +154,16 @@ extern bool support_select_modifies_timeout > (void); tv_usec larger than 1000000. */ > extern bool support_select_normalizes_timeout (void); > =20 > +/* Create a timer that trigger after SEC seconds and NSEC > nanoseconds. If > + REPEAT is true the timer will repeat indefinitely. If CALLBACK > is not > + NULL, the function will be called when the timer expires; > otherwise a > + dummy empty function is used instead. > + This is implemented with POSIX per-process timer with > SIGEV_SIGNAL. */ +timer_t support_create_timer (uint64_t sec, long > int nsec, bool repeat, > + void (*callback)(int)); > +/* Disable the timer TIMER. */ > +void support_delete_timer (timer_t timer); > + > __END_DECLS > =20 > #endif /* SUPPORT_H */ > diff --git a/support/support_create_timer.c > b/support/support_create_timer.c new file mode 100644 > index 0000000000..c93aaa5c6b > --- /dev/null > +++ b/support/support_create_timer.c > @@ -0,0 +1,69 @@ > +/* Create a periodic timer. > + Copyright (C) 2021 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be > useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + . */ > + > +#include > +#include > +#include > +#include > + > +static void > +dummy_alrm_handler (int sig) > +{ > +} > + > +timer_t > +support_create_timer (uint64_t sec, long int nsec, bool repeat, > + void (*callback)(int)) > +{ > + struct sigaction sa; > + sa.sa_handler =3D callback !=3D NULL ? callback : dummy_alrm_handler; > + sigemptyset (&sa.sa_mask); > + sa.sa_flags =3D 0; > + xsigaction (SIGALRM, &sa, NULL); > + > + struct sigevent ev =3D { > + .sigev_notify =3D SIGEV_SIGNAL, > + .sigev_signo =3D SIGALRM > + }; > + timer_t timerid; > + int r =3D timer_create (CLOCK_REALTIME, &ev, &timerid); > + if (r =3D=3D -1) > + FAIL_EXIT1 ("timer_create: %m"); > + > + /* Single timer with 0.1s. */ > + struct itimerspec its =3D > + { > + { .tv_sec =3D repeat ? sec : 0, .tv_nsec =3D repeat ? nsec : 0 }, > + { .tv_sec =3D sec, .tv_nsec =3D nsec } > + }; > + r =3D timer_settime (timerid, 0, &its, NULL); > + if (r =3D=3D -1) > + FAIL_EXIT1 ("timer_settime: %m"); > + > + return timerid; > +} > + > +/* Disable the timer TIMER. */ > +void > +support_delete_timer (timer_t timer) > +{ > + int r =3D timer_delete (timer); > + if (r =3D=3D -1) > + FAIL_EXIT1 ("timer_delete: %m"); > + xsignal (SIGALRM, SIG_DFL); > +} Reviewed-by: Lukasz Majewski Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de --Sig_/T_oAlJw_6bOSIHWy2+lpbbR Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQEzBAEBCgAdFiEEgAyFJ+N6uu6+XupJAR8vZIA0zr0FAmDQQu4ACgkQAR8vZIA0 zr1cuAgAlzzzAEzpSvrptfPw/mvi2V1FWm1wW1sveeS5K0XLKVdjR9QIS/P1QUnL e6LirJftGp/01oL33tz4xod2W5QB9bFmK4AIe/e81tI96inJvPDu5i1l4/Jb/9hr CSFAMxLxSrMHOGv+iLta1Wf7HioUes1nSCuSNGO8tNwr8uLhYaTj50iClplg8R5C aIXzieiqhfoxe3MrjhlE66hFZHyTrZt3H8ffKgC6Xlftn8CLOtVyp0bE1JNycvx5 l1M1GVsl/pUzVORmphPMIwEiK+j7KlWVaqWMRHyZWe7j7azHUYdaSX5kzAHc/oVj kSiiJTkdgpgBSZ0dn3/b7I5l9eVKyg== =aU1a -----END PGP SIGNATURE----- --Sig_/T_oAlJw_6bOSIHWy2+lpbbR--