aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js')
-rw-r--r--src/bun.js/api/postgres.classes.ts1
-rw-r--r--src/bun.js/bindings/ZigGeneratedClasses.cpp8
-rw-r--r--src/bun.js/bindings/ZigGeneratedClasses.h27
-rw-r--r--src/bun.js/bindings/bindings.cpp5
-rw-r--r--src/bun.js/bindings/generated_classes.zig1
-rw-r--r--src/bun.js/bindings/structure.cpp2
6 files changed, 42 insertions, 2 deletions
diff --git a/src/bun.js/api/postgres.classes.ts b/src/bun.js/api/postgres.classes.ts
index 0a6f209fe..1185f8389 100644
--- a/src/bun.js/api/postgres.classes.ts
+++ b/src/bun.js/api/postgres.classes.ts
@@ -42,6 +42,7 @@ export default [
construct: true,
finalize: true,
configurable: false,
+ hasPendingActivity: true,
JSType: "0b11101110",
klass: {},
proto: {
diff --git a/src/bun.js/bindings/ZigGeneratedClasses.cpp b/src/bun.js/bindings/ZigGeneratedClasses.cpp
index 47532a98c..aeba3881c 100644
--- a/src/bun.js/bindings/ZigGeneratedClasses.cpp
+++ b/src/bun.js/bindings/ZigGeneratedClasses.cpp
@@ -17913,6 +17913,12 @@ extern "C" EncodedJSValue PostgresSQLQuery__getConstructor(Zig::GlobalObject* gl
return JSValue::encode(globalObject->JSPostgresSQLQueryConstructor());
}
+extern "C" bool PostgresSQLQuery__hasPendingActivity(void* ptr);
+bool JSPostgresSQLQuery::hasPendingActivity(void* ctx)
+{
+ return PostgresSQLQuery__hasPendingActivity(ctx);
+}
+
JSPostgresSQLQuery::~JSPostgresSQLQuery()
{
if (m_ctx) {
@@ -18016,6 +18022,8 @@ void JSPostgresSQLQuery::visitAdditionalChildren(Visitor& visitor)
ASSERT_GC_OBJECT_INHERITS(thisObject, info());
visitor.append(thisObject->m_pendingValue);
visitor.append(thisObject->m_binding);
+
+ visitor.addOpaqueRoot(this->wrapped());
}
DEFINE_VISIT_ADDITIONAL_CHILDREN(JSPostgresSQLQuery);
diff --git a/src/bun.js/bindings/ZigGeneratedClasses.h b/src/bun.js/bindings/ZigGeneratedClasses.h
index 7080146df..31ea8ef47 100644
--- a/src/bun.js/bindings/ZigGeneratedClasses.h
+++ b/src/bun.js/bindings/ZigGeneratedClasses.h
@@ -1928,10 +1928,37 @@ public:
: Base(vm, structure)
{
m_ctx = sinkPtr;
+ m_weakThis = JSC::Weak<JSPostgresSQLQuery>(this, getOwner());
}
void finishCreation(JSC::VM&);
+ JSC::Weak<JSPostgresSQLQuery> m_weakThis;
+
+ static bool hasPendingActivity(void* ctx);
+
+ class Owner final : public JSC::WeakHandleOwner {
+ public:
+ bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void* context, JSC::AbstractSlotVisitor& visitor, const char** reason) final
+ {
+ auto* controller = JSC::jsCast<JSPostgresSQLQuery*>(handle.slot()->asCell());
+ if (JSPostgresSQLQuery::hasPendingActivity(controller->wrapped())) {
+ if (UNLIKELY(reason))
+ *reason = "has pending activity";
+ return true;
+ }
+
+ return visitor.containsOpaqueRoot(context);
+ }
+ void finalize(JSC::Handle<JSC::Unknown>, void* context) final {}
+ };
+
+ static JSC::WeakHandleOwner* getOwner()
+ {
+ static NeverDestroyed<Owner> m_owner;
+ return &m_owner.get();
+ }
+
DECLARE_VISIT_CHILDREN;
template<typename Visitor> void visitAdditionalChildren(Visitor&);
DECLARE_VISIT_OUTPUT_CONSTRAINTS;
diff --git a/src/bun.js/bindings/bindings.cpp b/src/bun.js/bindings/bindings.cpp
index a61a0221a..dd0e440af 100644
--- a/src/bun.js/bindings/bindings.cpp
+++ b/src/bun.js/bindings/bindings.cpp
@@ -4690,8 +4690,9 @@ extern "C" EncodedJSValue JSC__JSValue__dateInstanceFromNullTerminatedString(JSC
}
// this is largely copied from dateProtoFuncToISOString
-extern "C" int JSC__JSValue__toISOString(JSC::JSGlobalObject* globalObject, EncodedJSValue dateValue, char buffer[28])
+extern "C" int JSC__JSValue__toISOString(JSC::JSGlobalObject* globalObject, EncodedJSValue dateValue, char* buf)
{
+ char buffer[28];
JSC::DateInstance* thisDateObj = JSC::jsDynamicCast<JSC::DateInstance*>(JSC::JSValue::decode(dateValue));
if (!thisDateObj)
return -1;
@@ -4716,6 +4717,8 @@ extern "C" int JSC__JSValue__toISOString(JSC::JSGlobalObject* globalObject, Enco
else
charactersWritten = snprintf(buffer, sizeof(buffer), "%04d-%02d-%02dT%02d:%02d:%02d.%03dZ", gregorianDateTime->year(), gregorianDateTime->month() + 1, gregorianDateTime->monthDay(), gregorianDateTime->hour(), gregorianDateTime->minute(), gregorianDateTime->second(), ms);
+ memcpy(buf, buffer, charactersWritten);
+
ASSERT(charactersWritten > 0 && static_cast<unsigned>(charactersWritten) < sizeof(buffer));
if (static_cast<unsigned>(charactersWritten) >= sizeof(buffer))
return -1;
diff --git a/src/bun.js/bindings/generated_classes.zig b/src/bun.js/bindings/generated_classes.zig
index 7e76611b4..53be7b778 100644
--- a/src/bun.js/bindings/generated_classes.zig
+++ b/src/bun.js/bindings/generated_classes.zig
@@ -4532,6 +4532,7 @@ pub const JSPostgresSQLQuery = struct {
@export(PostgresSQLQuery.doRun, .{ .name = "PostgresSQLQueryPrototype__doRun" });
@export(PostgresSQLQuery.estimatedSize, .{ .name = "PostgresSQLQuery__estimatedSize" });
@export(PostgresSQLQuery.finalize, .{ .name = "PostgresSQLQueryClass__finalize" });
+ @export(PostgresSQLQuery.hasPendingActivity, .{ .name = "PostgresSQLQuery__hasPendingActivity" });
}
}
};
diff --git a/src/bun.js/bindings/structure.cpp b/src/bun.js/bindings/structure.cpp
index 9e1fb6dc2..82358abf8 100644
--- a/src/bun.js/bindings/structure.cpp
+++ b/src/bun.js/bindings/structure.cpp
@@ -10,7 +10,7 @@ using namespace JSC;
extern "C" EncodedJSValue JSC__createStructure(JSC::JSGlobalObject* globalObject, unsigned int inlineCapacity, BunString* names)
{
auto& vm = globalObject->vm();
- JSC::Structure* structure = JSC::Structure::create(vm, globalObject, globalObject->objectPrototype(), JSC::TypeInfo(ObjectType, JSC::JSObject::StructureFlags), JSC::JSFinalObject::info(), inlineCapacity);
+ JSC::Structure* structure = globalObject->structureCache().emptyObjectStructureConcurrently(globalObject->objectPrototype(), inlineCapacity);
PropertyOffset offset = 0;
for (unsigned i = 0; i < inlineCapacity; i++) {
const Identifier& ident = JSC::Identifier::fromString(vm, Bun::toWTFString(names[i]));