| From: | Sami Imseih <samimseih(at)gmail(dot)com> |
|---|---|
| To: | Zsolt Parragi <zsolt(dot)parragi(at)percona(dot)com> |
| Cc: | Nathan Bossart <nathandbossart(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
| Subject: | Re: Proposal: Add a callback data parameter to GetNamedDSMSegment |
| Date: | 2025-12-04 16:30:38 |
| Message-ID: | CAA5RZ0u264cXvMV3ac0BqUBWLdw68EYMrUaRKs5kTpP125zSog@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
> struct Foo {
> LWLock lock;
> size_t size;
> Bar data[];
> };
>
> * To create a few of these, I have to provide a lock name to the
> callback, that's the "reusing the same callback" part again
> * And then there's the question of initialization. Either I leave it
> to the caller after returning from GetNamedDSHash using the lock,
"caller after returning from GetNamedDSHash" <- do you mean
GetNamedDSMSegment ?
> or somehow I have to tell the initialization callback the array size -
> even if I can calculate the size based on a GUC,
```
typedef struct Bar {
int f1;
int f2;
} Bar;
typedef struct Foo {
LWLock lock;
size_t size;
Bar data[];
} Foo;
foo_state = GetNamedDSMSegment("Foo",
offsetof(Foo, data) + BAR_ARRAY_SIZE * sizeof(int),
foo_init_state,
&found);
```
wouldn't the above be sufficient to create a DSM segment containing
a flexible array?
--
Sami Imseih
Amazon Web Services (AWS)
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Matthias van de Meent | 2025-12-04 16:32:48 | Re: Revisiting {CREATE INDEX, REINDEX} CONCURRENTLY improvements |
| Previous Message | Nathan Bossart | 2025-12-04 16:29:24 | Re: Fix PrivateRefCount hash table key size |