Skip to content

Commit 28023d0

Browse files
authored
Merge branch 'master' into tyler/update-nativeaot-llvm-infrastructure
2 parents 396a59c + 0cbf4dc commit 28023d0

45 files changed

Lines changed: 1464 additions & 202 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.cargo/config.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ llm = "run --package xtask-llm-benchmark --bin llm_benchmark --"
77
ci = "run -p ci --"
88
smoketest = "ci smoketests --"
99
smoketests = "smoketest"
10+
lint = "ci lint --"
1011

1112
[target.x86_64-pc-windows-msvc]
1213
# Use a different linker. Otherwise, the build fails with some obscure linker error that

crates/bindings-cpp/include/spacetimedb/internal/runtime_registration.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
#ifndef SPACETIMEDB_RUNTIME_REGISTRATION_H
22
#define SPACETIMEDB_RUNTIME_REGISTRATION_H
33

4+
#include <atomic>
45
#include <functional>
56
#include <optional>
67
#include <string>
8+
#include <type_traits>
9+
#include <utility>
710
#include <vector>
811
#include "../abi/opaque_types.h"
912
#include "autogen/Lifecycle.g.h"
@@ -33,6 +36,18 @@ std::vector<uint8_t> ConsumeBytes(BytesSource source);
3336
void SetMultiplePrimaryKeyError(const std::string& table_name);
3437
void SetConstraintRegistrationError(const std::string& code, const std::string& details);
3538

39+
template <typename F>
40+
__attribute__((noinline)) decltype(auto) __spacetimedb_begin_short_backtrace(F&& f) {
41+
if constexpr (std::is_void_v<std::invoke_result_t<F>>) {
42+
std::forward<F>(f)();
43+
std::atomic_signal_fence(std::memory_order_seq_cst);
44+
} else {
45+
decltype(auto) result = std::forward<F>(f)();
46+
std::atomic_signal_fence(std::memory_order_seq_cst);
47+
return result;
48+
}
49+
}
50+
3651
} // namespace Internal
3752
} // namespace SpacetimeDB
3853

crates/bindings-cpp/include/spacetimedb/internal/v10_builder.h

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,9 @@ class V10Builder {
337337
std::function<void(ReducerContext&, BytesSource)> handler;
338338
if constexpr (traits::arity == 1) {
339339
handler = [func](ReducerContext& ctx, BytesSource) {
340-
auto result = func(ctx);
340+
auto result = __spacetimedb_begin_short_backtrace([&] {
341+
return func(ctx);
342+
});
341343
if (result.is_err()) {
342344
::SpacetimeDB::fail_reducer(result.error());
343345
}
@@ -349,7 +351,9 @@ class V10Builder {
349351
bsatn::Reader reader(bytes.data(), bytes.size());
350352
auto args = std::make_tuple(bsatn::deserialize<typename traits::template arg_t<Js + 1>>(reader)...);
351353
std::apply([&ctx_inner, fn](auto&&... unpacked) {
352-
auto result = fn(ctx_inner, std::forward<decltype(unpacked)>(unpacked)...);
354+
auto result = __spacetimedb_begin_short_backtrace([&] {
355+
return fn(ctx_inner, std::forward<decltype(unpacked)>(unpacked)...);
356+
});
353357
if (result.is_err()) {
354358
::SpacetimeDB::fail_reducer(result.error());
355359
}
@@ -406,7 +410,9 @@ class V10Builder {
406410
std::function<void(ReducerContext&, BytesSource)> handler;
407411
if constexpr (traits::arity == 1) {
408412
handler = [func](ReducerContext& ctx, BytesSource) {
409-
auto result = func(ctx);
413+
auto result = __spacetimedb_begin_short_backtrace([&] {
414+
return func(ctx);
415+
});
410416
if (result.is_err()) {
411417
::SpacetimeDB::fail_reducer(result.error());
412418
}
@@ -418,7 +424,9 @@ class V10Builder {
418424
bsatn::Reader reader(bytes.data(), bytes.size());
419425
auto args = std::make_tuple(bsatn::deserialize<typename traits::template arg_t<Js + 1>>(reader)...);
420426
std::apply([&ctx_inner, fn](auto&&... unpacked) {
421-
auto result = fn(ctx_inner, std::forward<decltype(unpacked)>(unpacked)...);
427+
auto result = __spacetimedb_begin_short_backtrace([&] {
428+
return fn(ctx_inner, std::forward<decltype(unpacked)>(unpacked)...);
429+
});
422430
if (result.is_err()) {
423431
::SpacetimeDB::fail_reducer(result.error());
424432
}
@@ -461,7 +469,9 @@ class V10Builder {
461469
std::function<std::vector<uint8_t>(ViewContext&, BytesSource)> handler =
462470
[func](ViewContext& ctx, BytesSource args_source) -> std::vector<uint8_t> {
463471
(void)args_source;
464-
auto result = func(ctx);
472+
auto result = __spacetimedb_begin_short_backtrace([&] {
473+
return func(ctx);
474+
});
465475
auto result_vec = view_result_to_vec(std::move(result));
466476
IterBuf buf = IterBuf::take();
467477
{
@@ -475,7 +485,9 @@ class V10Builder {
475485
std::function<std::vector<uint8_t>(AnonymousViewContext&, BytesSource)> handler =
476486
[func](AnonymousViewContext& ctx, BytesSource args_source) -> std::vector<uint8_t> {
477487
(void)args_source;
478-
auto result = func(ctx);
488+
auto result = __spacetimedb_begin_short_backtrace([&] {
489+
return func(ctx);
490+
});
479491
auto result_vec = view_result_to_vec(std::move(result));
480492
IterBuf buf = IterBuf::take();
481493
{
@@ -525,7 +537,9 @@ class V10Builder {
525537
std::function<std::vector<uint8_t>(ProcedureContext&, BytesSource)> handler;
526538
if constexpr (traits::arity == 1) {
527539
handler = [func](ProcedureContext& ctx, BytesSource) -> std::vector<uint8_t> {
528-
auto result = func(ctx);
540+
auto result = __spacetimedb_begin_short_backtrace([&] {
541+
return func(ctx);
542+
});
529543
IterBuf buf = IterBuf::take();
530544
{
531545
bsatn::Writer writer(buf.get());
@@ -539,9 +553,11 @@ class V10Builder {
539553
return []<std::size_t... Js>(std::index_sequence<Js...>, Func fn, ProcedureContext& ctx_inner, const std::vector<uint8_t>& bytes) -> std::vector<uint8_t> {
540554
bsatn::Reader reader(bytes.data(), bytes.size());
541555
auto args = std::make_tuple(bsatn::deserialize<typename traits::template arg_t<Js + 1>>(reader)...);
542-
auto result = std::apply([&ctx_inner, fn](auto&&... unpacked) {
543-
return fn(ctx_inner, std::forward<decltype(unpacked)>(unpacked)...);
544-
}, args);
556+
auto result = __spacetimedb_begin_short_backtrace([&] {
557+
return std::apply([&ctx_inner, fn](auto&&... unpacked) {
558+
return fn(ctx_inner, std::forward<decltype(unpacked)>(unpacked)...);
559+
}, args);
560+
});
545561
IterBuf buf = IterBuf::take();
546562
{
547563
bsatn::Writer writer(buf.get());

0 commit comments

Comments
 (0)