From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751776AbaHPV5X (ORCPT ); Sat, 16 Aug 2014 17:57:23 -0400 Received: from dcvr.yhbt.net ([64.71.152.64]:56519 "EHLO dcvr.yhbt.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751626AbaHPV5W (ORCPT ); Sat, 16 Aug 2014 17:57:22 -0400 X-Greylist: delayed 377 seconds by postgrey-1.27 at vger.kernel.org; Sat, 16 Aug 2014 17:57:22 EDT Date: Sat, 16 Aug 2014 21:51:04 +0000 From: Eric Wong To: Steven Stewart-Gallus Cc: linux-kernel@vger.kernel.org, linux-api@vger.kernel.org, mtk@man7.org Subject: Re: Does anyone know when FUTEX_WAIT can fail with EAGAIN? Message-ID: <20140816215104.GA19006@dcvr.yhbt.net> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Steven Stewart-Gallus wrote: > I'm trying to debug a hangup where my program loops with FUTEX_WAIT (actually > FUTEX_WAIT_PRIVATE but same thing) endlessly erring out with EAGAIN. I would > like to know if anyone on the mailing list knows when FUTEX_WAIT can fail with > EAGAIN. FUTEX_WAIT fails with EAGAIN if the value of *uaddr no longer matches the expected val. --- #include #include #include #include int main(void) { int op = FUTEX_WAIT; int exp = 1; int *addr = &exp; int val = 1; /* XXX change this to anything else to get EAGAIN */ int rc = syscall(SYS_futex, addr, op, val, 0, 0, 0); if (rc < 0 && errno == EAGAIN) write(1, "EAGAIN\n", 7); return 0; } --- I just encountered this myself yesterday while implementing futex-based locks/condvars for Ruby: https://bugs.ruby-lang.org/issues/10009#change-48372