New submission from Inada Naoki <songofaca...@gmail.com>:
I checked stack usage for bpo-46600 and found this two functions use a lot of stack. os_setgroups: 262200 bytes os_getgroups_impl: 262184 bytes Both function has local variable like this: gid_t grouplist[MAX_GROUPS]; MAX_GROUPS is defined as: ``` #ifdef NGROUPS_MAX #define MAX_GROUPS NGROUPS_MAX #else /* defined to be 16 on Solaris7, so this should be a small number */ #define MAX_GROUPS 64 #endif ``` NGROUPS_MAX is 65536 and sizeof(gid_t) is 4 on Ubuntu 20.04, so grouplist is 262144bytes. It seems this grouplist is just for avoid allocation: ``` } else if (n <= MAX_GROUPS) { /* groups will fit in existing array */ alt_grouplist = grouplist; } else { alt_grouplist = PyMem_New(gid_t, n); if (alt_grouplist == NULL) { return PyErr_NoMemory(); } ``` How about just using `#define MAX_GROUPS 64`? Or should we remove this grouplist because os.grouplist() is not called so frequently? ---------- components: Library (Lib) messages: 412335 nosy: methane priority: normal severity: normal status: open title: Large C stack usage of os.getgroups() and os.setgroups() versions: Python 3.11 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue46606> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com