!lheuhImcToQZYTQTuI:nixos.org

Nix on macOS

1153 Members
“There are still many issues with the Darwin platform but most of it is quite usable.” — http://yves.gnu-darwin.org183 Servers

Load older messages


SenderMessageTime
22 Dec 2025
@reckenrode:matrix.orgRandy EckenrodeThe implication in the Darwin headers seems to suggest that it’s using a 64-bit type, which is a lot of fds.17:40:36
@reckenrode:matrix.orgRandy EckenrodeYeah.17:40:45
@ihar.hrachyshka:matrix.orgIhar Hrachyshkanot sure I understand. the fds are passed by caller. it's up to caller.17:41:44
@ihar.hrachyshka:matrix.orgIhar Hrachyshka

complete macos g_poll:

gint
g_poll (GPollFD *fds,
	guint    nfds,
	gint     timeout)
{
  struct timeval tv;
  fd_set rset, wset, xset;
  GPollFD *f;
  int ready;
  int maxfd = 0;

  FD_ZERO (&rset);
  FD_ZERO (&wset);
  FD_ZERO (&xset);

  for (f = fds; f < &fds[nfds]; ++f)
    if (f->fd >= 0)
      {
	if (f->events & G_IO_IN)
	  FD_SET (f->fd, &rset);
	if (f->events & G_IO_OUT)
	  FD_SET (f->fd, &wset);
	if (f->events & G_IO_PRI)
	  FD_SET (f->fd, &xset);
	if (f->fd > maxfd && (f->events & (G_IO_IN|G_IO_OUT|G_IO_PRI)))
	  maxfd = f->fd;
      }

  tv.tv_sec = timeout / 1000;
  tv.tv_usec = (timeout % 1000) * 1000;

  ready = select (maxfd + 1, &rset, &wset, &xset,
		  timeout == -1 ? NULL : &tv);
  if (ready > 0)
    for (f = fds; f < &fds[nfds]; ++f)
      {
	f->revents = 0;
	if (f->fd >= 0)
	  {
	    if (FD_ISSET (f->fd, &rset))
	      f->revents |= G_IO_IN;
	    if (FD_ISSET (f->fd, &wset))
	      f->revents |= G_IO_OUT;
	    if (FD_ISSET (f->fd, &xset))
	      f->revents |= G_IO_PRI;
	  }
      }

  return ready;
}
17:42:17
@ihar.hrachyshka:matrix.orgIhar Hrachyshka you mean fd_sets? 17:43:04
@reckenrode:matrix.orgRandy EckenrodeYeah.17:43:51
@reckenrode:matrix.orgRandy EckenrodeThat comment about where the sets are allocated doesn’t make sense to me.17:44:42
@ihar.hrachyshka:matrix.orgIhar Hrachyshkaguess I should just test and see. I have a reproducer, just need to recompile glib to qemu and see.17:44:57
@reckenrode:matrix.orgRandy Eckenrode * 17:44:59
@ihar.hrachyshka:matrix.orgIhar Hrachyshka source == hacker news nobody 17:45:27
@reckenrode:matrix.orgRandy Eckenrodehttps://github.com/apple-oss-distributions/xnu/blob/f6217f891ac0bb64f3d375211650a4c1ff8ca1ea/bsd/sys/_types/_fd_def.h#L52_L5417:46:06
@reckenrode:matrix.orgRandy EckenrodeFish shell developer?17:47:01
@ihar.hrachyshka:matrix.orgIhar HrachyshkaI was actually also looking at the same struct def. so looks like we may need to also define the __DARWIN_FD_SETSIZE otherwise we write past the end of the struct (I think)17:47:57
@reckenrode:matrix.orgRandy EckenrodeOr malloc it based on the size of the incoming set.17:49:12
@reckenrode:matrix.orgRandy EckenrodeGlib supports using cleanup functions to make that less messy.17:49:27
@reckenrode:matrix.orgRandy Eckenrode Though if it’s a mask for all fds, you don’t really know the needed size. 17:50:00
@reckenrode:matrix.orgRandy Eckenrodehttps://man.freebsd.org/cgi/man.cgi?select17:52:21
@reckenrode:matrix.orgRandy Eckenrode Apple mentioned FreeBSD being unlimited. I agree we should probably increase the amount of memory it’s using (either by defining FD_SETSIZE or some other way). 17:53:19
@reckenrode:matrix.orgRandy Eckenrode

Looks like (unsurprisingly) FreeBSD has a similar implementation.

https://github.com/freebsd/freebsd-src/blob/f51e9d0e0988df58c94db586ab5c8b5fd091c004/sys/sys/select.h#L65

17:55:17
@reckenrode:matrix.orgRandy EckenrodeI guess FreeBSD doesn’t enforce the limit if you define it to something non-default.17:55:46
@ihar.hrachyshka:matrix.orgIhar Hrachyshkaso darwin just broke the api to pass posix17:56:22
@ihar.hrachyshka:matrix.orgIhar Hrachyshkawell, broke -> adjusted to standard17:56:33
@hexa:lossy.networkhexa Randy Eckenrode, emily any reason I should not update the darwin buildfarm to tahoe? 21:45:40
@-chi:matrix.org@-chi:matrix.org left the room.21:48:15
@reckenrode:matrix.orgRandy EckenrodeNot that I can think of. It hasn’t broken Nix or Nixpkgs like updates have in the past.21:48:50
@qyliss:fairydust.spaceAlyssa Ross poll usability flip-flopping every macOS release is a sort of famous example of macOS POSIX-noncompliance: https://daniel.haxx.se/blog/2016/10/11/poll-on-mac-10-12-is-broken/ 21:49:59
@qyliss:fairydust.spaceAlyssa Ross * poll usability flip-flopping between macOS releases is a sort of famous example of macOS POSIX-noncompliance: https://daniel.haxx.se/blog/2016/10/11/poll-on-mac-10-12-is-broken/ 21:50:19
@qyliss:fairydust.spaceAlyssa Rossit might well presently work, but the track record is not confidence-inspiring21:50:48
@qyliss:fairydust.spaceAlyssa Rossand since you couldn't tell at build time whether the built program would end up being run on a macOS with broken poll, hardcoding not to use it on macOS was the only sensible solution21:52:12
@qyliss:fairydust.spaceAlyssa Ross(assuming the complexity of detecting it at runtime isn't worth it)21:52:55

Show newer messages


Back to Room ListRoom Version: 6