Skip to content

Commit 77afeac

Browse files
committed
fixup example
1 parent 4a3a0ae commit 77afeac

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

docs/design/datacontracts/contract-descriptor.md

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ struct DotNetRuntimeContractDescriptor
3131

3232
struct DotNetRuntimeContractDescriptorList
3333
{
34-
struct DotNetRuntimeContractDescriptor descriptor;
34+
const struct DotNetRuntimeContractDescriptor *descriptor;
3535
const char *runtime_name;
3636
struct DotNetRuntimeContractDescriptorList *next_runtime;
3737
}
@@ -129,23 +129,30 @@ typedef _Atomic(DescPtr) AtomicDescPtr;
129129
// global weak symbol
130130
AtomicDescPtr __attribute__((weak)) DotNetRuntimeContractDescriptor;
131131

132-
static const struct DotNetRuntimeContractDescriptor g_private_descriptor = { ... }; // predefined descriptor for current runtime
132+
// predefined descriptor for current runtime
133+
static const struct DotNetRuntimeContractDescriptor g_private_descriptor = { ... };
134+
135+
// install_descriptor will try to assign the address of s_runtime_descriptor to the global symbol
136+
static struct DotNetRuntimeContractDescriptorList s_runtime_descriptor = {
137+
.descriptor = &g_private_descriptor,
138+
.runtime_name = NULL,
139+
.next_runtime = NULL
140+
};
133141

134142
// to be called at startup
135143
void
136144
install_descriptor(const char *runtime_name)
137145
{
138-
DescPtr descriptor = malloc(sizeof(struct DotNetRuntimeContractDescriptorList));
139-
assert (descriptor != NULL);
140-
descriptor->descriptor = g_private_descriptor; // copy the constant values
146+
DescPtr descriptor = &s_runtime_descriptor;
141147
descriptor->runtime_name = runtime_name;
142148
descriptor->next_runtime = NULL;
143149

144150
DescPtr prev = atomic_load(&DotNetRuntimeContractDescriptor);
145151
do
146152
{
147153
descriptor->next_runtime = prev;
148-
} while (!atomic_compare_exchange_weak(&DotNetRuntimeConctractDescriptor, &prev, descriptor));
154+
}
155+
while (!atomic_compare_exchange_weak(&DotNetRuntimeContractDescriptor, &prev, descriptor));
149156
}
150157
```
151158

0 commit comments

Comments
 (0)