diff --git a/crates/sb_core/js/main_worker.js b/crates/sb_core/js/main_worker.js index 14b77cdce..eb0f210b4 100644 --- a/crates/sb_core/js/main_worker.js +++ b/crates/sb_core/js/main_worker.js @@ -11,6 +11,7 @@ Object.defineProperty(globalThis, 'EdgeRuntime', { getRuntimeMetrics: () => /* async */ ops.op_runtime_metrics(), applySupabaseTag: (src, dest) => applySupabaseTag(src, dest), systemMemoryInfo: () => ops.op_system_memory_info(), + raiseSegfault: () => ops.op_raise_segfault(), }; }, configurable: true, diff --git a/crates/sb_core/lib.rs b/crates/sb_core/lib.rs index a0b3a6d15..e050ceb39 100644 --- a/crates/sb_core/lib.rs +++ b/crates/sb_core/lib.rs @@ -343,6 +343,14 @@ fn op_set_raw( Ok(()) } +#[op2(fast)] +fn op_raise_segfault(_state: &mut OpState) { + unsafe { + let ptr: *const i32 = std::ptr::null(); + println!("{}", *ptr); + } +} + #[op2] #[serde] pub fn op_bootstrap_unstable_args(_state: &mut OpState) -> Vec { @@ -361,7 +369,8 @@ deno_core::extension!( op_schedule_mem_check, op_runtime_memory_usage, op_set_raw, - op_bootstrap_unstable_args + op_bootstrap_unstable_args, + op_raise_segfault, ], esm_entry_point = "ext:sb_core_main_js/js/bootstrap.js", esm = [ diff --git a/examples/main/index.ts b/examples/main/index.ts index 6c51a74ea..991406327 100644 --- a/examples/main/index.ts +++ b/examples/main/index.ts @@ -25,6 +25,17 @@ Deno.serve(async (req: Request) => { ); } + // if (pathname === '/_internal/segfault') { + // EdgeRuntime.raiseSegfault(); + // return new Response( + // JSON.stringify({ 'message': 'ok' }), + // { + // status: STATUS_CODE.OK, + // headers, + // }, + // ); + // } + if (pathname === '/_internal/metric') { const metric = await EdgeRuntime.getRuntimeMetrics(); return Response.json(metric);