From owner-freebsd-hackers@freebsd.org Thu May 2 18:30:52 2019 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AA275159E1E0 for ; Thu, 2 May 2019 18:30:52 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E5BC26CB9F for ; Thu, 2 May 2019 18:30:51 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id x42IUh9a036720 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 2 May 2019 21:30:46 +0300 (EEST) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua x42IUh9a036720 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id x42IUgYu036719; Thu, 2 May 2019 21:30:42 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Thu, 2 May 2019 21:30:42 +0300 From: Konstantin Belousov To: "Fedorov, Aleksandr" Cc: "freebsd-hackers@freebsd.org" Subject: Re: TASKQUEUE(9) KPI enqueue task only once Message-ID: <20190502183042.GH85201@kib.kiev.ua> References: <05b18f73ee054b9696d055ed40610dea@vstack.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <05b18f73ee054b9696d055ed40610dea@vstack.com> User-Agent: Mutt/1.11.4 (2019-03-13) X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FORGED_GMAIL_RCVD,FREEMAIL_FROM, NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on tom.home X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 May 2019 18:30:52 -0000 On Thu, May 02, 2019 at 03:12:30PM +0000, Fedorov, Aleksandr wrote: > Hi Hackers. > > I need to enqueue task to the taskqueue only if there is no pending tasks. > > I found the taskqueue_poll_is_busy() function, but the comment above indicates that > it should be used only from single threaded contexts. > > Is there a conventional way to do this? The reference to the single threaded context above is just a funny way to say that the function is inherently racy. It can only work when enqueue is done from the same thread that executes the task. Why do you need that ? Suppose that you have such function, how would you use it ? Any check for the running task inside such function cannot know if the task function is already on the return path and do not intend to proceed your request that you want to enqueue conditionally. Or, lets formulate the question differently: what is your problem with queueing task despite it is already pending or running ?