Program crash: GC destroys an object unexpectedly

eugene dee0xeed at gmail.com
Tue Sep 14 15:37:27 UTC 2021


On Tuesday, 14 September 2021 at 14:56:00 UTC, jfondren wrote:
> You could fix this by having a 128-bit struct and passing C an 
> index into it

It is another "not so funny joke", isn't it?
Look

```c
     typedef union epoll_data {
         void *ptr;
         int fd;
         uint32_t u32;
         uint64_t u64;
     } epoll_data_t;

     struct epoll_event {
         uint32_t events;      /* Epoll events */
         epoll_data_t data;    /* User data variable */
     } __EPOLL_PACKED;

    // inside the system
    struct epoll_event {
          __u32 events;
          __u64 data;
    } EPOLL_PACKED;
```

and notice

```d
align (1) struct EpollEvent {
     align(1):
     uint event_mask;
     EventSource es;
     /* just do not want to use that union, epoll_data_t */
}
static assert(EpollEvent.sizeof == 12);
```



More information about the Digitalmars-d-learn mailing list