Re: [PATCH] Cygwin: Fix error return for madvise()

Takashi Yano <[email protected]> Tue, 7 Jul 2026 17:58:35 +0900
Newsgroups gmane.os.cygwin.patches
Message-ID <[email protected]>
Hi Mark,

On Tue, 7 Jul 2026 00:58:48 -0700
Mark Geisert wrote:
> Hi Takashi,
> 
> On 7/6/2026 5:45 PM, Takashi Yano wrote:
> > Hi Mark,
> > 
> > On Mon,  6 Jul 2026 16:47:43 -0700
> > Mark Geisert wrote:
> >> Currently madvise() and posix_madvise() are wired together as one
> >> function: the latter.  But their error returns should be different.
> >> Make madvise a first-class export in cygwin.din; code a new madvise()
> >> that calls posix_madvise() and massages any error return.
> >>
> >> Reported-by: Christian Franke <[email protected]>
> >> Addresses: https://cygwin.com/pipermail/cygwin/2026-July/259872.html
> >> Signed-off-by: Mark Geisert <[email protected]>
> >> Fixes: 61522196c715 (* Merge in cygwin-64bit-branch.)
> >>
> >> ---
> >>   winsup/cygwin/cygwin.din               |  2 +-
> >>   winsup/cygwin/include/cygwin/version.h |  3 ++-
> >>   winsup/cygwin/mm/mmap.cc               | 12 ++++++++++++
> >>   3 files changed, 15 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/winsup/cygwin/cygwin.din b/winsup/cygwin/cygwin.din
> >> index 2e53bc819..937eacdaf 100644
> >> --- a/winsup/cygwin/cygwin.din
> >> +++ b/winsup/cygwin/cygwin.din
> >> @@ -951,7 +951,7 @@ lseek SIGFE
> >>   lsetxattr SIGFE
> >>   lstat SIGFE
> >>   lutimes SIGFE
> >> -madvise = posix_madvise SIGFE
> >> +madvise SIGFE
> >>   makecontext NOSIGFE
> >>   mallinfo SIGFE
> >>   malloc SIGFE
> >> diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h
> >> index 71ac5282b..fc838e23e 100644
> >> --- a/winsup/cygwin/include/cygwin/version.h
> >> +++ b/winsup/cygwin/include/cygwin/version.h
> >> @@ -502,12 +502,13 @@ details. */
> >>     360: Add RLIMIT_NPROC.
> >>     361: Export _Fork.
> >>     362: Export C23 stdbit functions.
> >> +  363: Export madvise separately from posix_madvise.
> >>   
> >>     Note that we forgot to bump the api for ualarm, strtoll, strtoull,
> >>     sigaltstack, sethostname. */
> >>   
> >>   #define CYGWIN_VERSION_API_MAJOR 0
> >> -#define CYGWIN_VERSION_API_MINOR 362
> >> +#define CYGWIN_VERSION_API_MINOR 363
> >>   
> >>   /* There is also a compatibity version number associated with the shared memory
> >>      regions.  It is incremented when incompatible changes are made to the shared
> > 
> > I don't think we should change CYGWIN_VERSION_API_MINOR value
> > because the API itself is not changed. This patch fixes a bug
> > in madvice() implementation.
> 
> I went back and forth internally on whether the minor version should be 
> bumped.  One point was whether divorcing madvise() from posix_madvise() 
> in cygwin.din warranted an API bump: without a bump won't existing 
> programs be unable to access the new error return behavior?  Another 
> point was that the error return behavior of madvise() is being changed; 
> isn't that behavior part of the API?  I agree this is a bug fix but such 
> fixes could cause API changes.

I could not found the case that API version bump for behavioral change
in the past.

The adding MACROs such as:
  148: Add open(2) flags O_SYNC, O_RSYNC, O_DSYNC and O_DIRECT.
  149: Add open(2) flag O_NOFOLLOW.
could be a 'behavioral change', but header files for user were also
changed in these cases.

> This is a case where I'd like to get input from other folks who might've 
> made similar changes to Cygwin over its long history.  I am totally OK 
> with removing the API bump in a v2 patch if that's the consensus opinion.

What do others think about this?

> Thank you for the review!
> 
> ..mark
> 


-- 
Takashi Yano <[email protected]>