]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-104787: use bitfields in `_asyncio` (#104788)
authorKumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
Tue, 13 Jun 2023 05:41:34 +0000 (11:11 +0530)
committerGitHub <noreply@github.com>
Tue, 13 Jun 2023 05:41:34 +0000 (11:11 +0530)
Modules/_asynciomodule.c

index 08ce172c6a8fcb87046e9b1192f02566b69e7ce7..4b84c1de66be0e4826ef8739f8e255b3bb5f717f 100644 (file)
@@ -119,11 +119,14 @@ typedef enum {
     PyObject *prefix##_result;                                              \
     PyObject *prefix##_source_tb;                                           \
     PyObject *prefix##_cancel_msg;                                          \
-    fut_state prefix##_state;                                               \
-    int prefix##_log_tb;                                                    \
-    int prefix##_blocking;                                                  \
     PyObject *prefix##_weakreflist;                                         \
-    PyObject *prefix##_cancelled_exc;
+    PyObject *prefix##_cancelled_exc;                                       \
+    fut_state prefix##_state;                                               \
+    /* These bitfields need to be at the end of the struct
+       so that these and bitfields from TaskObj are contiguous.
+    */                                                                      \
+    unsigned prefix##_log_tb: 1;                                            \
+    unsigned prefix##_blocking: 1;
 
 typedef struct {
     FutureObj_HEAD(fut)
@@ -131,13 +134,13 @@ typedef struct {
 
 typedef struct {
     FutureObj_HEAD(task)
+    unsigned task_must_cancel: 1;
+    unsigned task_log_destroy_pending: 1;
+    int task_num_cancels_requested;
     PyObject *task_fut_waiter;
     PyObject *task_coro;
     PyObject *task_name;
     PyObject *task_context;
-    int task_must_cancel;
-    int task_log_destroy_pending;
-    int task_num_cancels_requested;
 } TaskObj;
 
 typedef struct {