diff --git a/runtime/bin/file.cc b/runtime/bin/file.cc index 0bc02c01f6e..cdbbc959f73 100644 --- a/runtime/bin/file.cc +++ b/runtime/bin/file.cc @@ -113,12 +113,15 @@ void FUNCTION_NAME(File_Open)(Dart_NativeArguments args) { } void FUNCTION_NAME(File_Exists)(Dart_NativeArguments args) { - Namespace* namespc = Namespace::GetNamespace(args, 0); - Dart_Handle path_handle = Dart_GetNativeArgument(args, 1); - TypedDataScope data(path_handle); - ASSERT(data.type() == Dart_TypedData_kUint8); - const char* filename = data.GetCString(); - bool exists = File::Exists(namespc, filename); + bool exists; + { + Namespace* namespc = Namespace::GetNamespace(args, 0); + Dart_Handle path_handle = Dart_GetNativeArgument(args, 1); + TypedDataScope data(path_handle); + ASSERT(data.type() == Dart_TypedData_kUint8); + const char* filename = data.GetCString(); + exists = File::Exists(namespc, filename); + } Dart_SetBooleanReturnValue(args, exists); } @@ -710,13 +713,16 @@ void FUNCTION_NAME(File_GetStdioHandleType)(Dart_NativeArguments args) { } void FUNCTION_NAME(File_GetType)(Dart_NativeArguments args) { - Namespace* namespc = Namespace::GetNamespace(args, 0); - Dart_Handle path_handle = Dart_GetNativeArgument(args, 1); - TypedDataScope data(path_handle); - ASSERT(data.type() == Dart_TypedData_kUint8); - const char* path = data.GetCString(); - bool follow_links = DartUtils::GetNativeBooleanArgument(args, 2); - File::Type type = File::GetType(namespc, path, follow_links); + File::Type type; + { + Namespace* namespc = Namespace::GetNamespace(args, 0); + Dart_Handle path_handle = Dart_GetNativeArgument(args, 1); + TypedDataScope data(path_handle); + ASSERT(data.type() == Dart_TypedData_kUint8); + const char* path = data.GetCString(); + bool follow_links = DartUtils::GetNativeBooleanArgument(args, 2); + type = File::GetType(namespc, path, follow_links); + } Dart_SetIntegerReturnValue(args, static_cast(type)); } diff --git a/runtime/bin/sync_socket.cc b/runtime/bin/sync_socket.cc index 12b1fee76a6..4589d4a1281 100644 --- a/runtime/bin/sync_socket.cc +++ b/runtime/bin/sync_socket.cc @@ -141,13 +141,13 @@ void FUNCTION_NAME(SynchronousSocket_WriteList)(Dart_NativeArguments args) { buffer += offset; intptr_t bytes_written = SynchronousSocket::Write(socket->fd(), buffer, length); + Dart_TypedDataReleaseData(buffer_obj); if (bytes_written >= 0) { Dart_SetIntegerReturnValue(args, bytes_written); } else { OSError os_error; Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error)); } - Dart_TypedDataReleaseData(buffer_obj); } void FUNCTION_NAME(SynchronousSocket_ReadList)(Dart_NativeArguments args) { diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc index b01af49f2f0..4f304d966d3 100644 --- a/runtime/vm/dart_api_impl.cc +++ b/runtime/vm/dart_api_impl.cc @@ -4712,6 +4712,7 @@ DART_EXPORT void Dart_SetReturnValue(Dart_NativeArguments args, Dart_Handle retval) { NativeArguments* arguments = reinterpret_cast(args); ASSERT(arguments->thread()->isolate() == Isolate::Current()); + ASSERT_CALLBACK_STATE(arguments->thread()); if ((retval != Api::Null()) && !Api::IsInstance(retval) && !Api::IsError(retval)) { // Print the current stack trace to make the problematic caller @@ -4832,6 +4833,8 @@ Dart_SetEnvironmentCallback(Dart_EnvironmentCallback callback) { DART_EXPORT void Dart_SetBooleanReturnValue(Dart_NativeArguments args, bool retval) { NativeArguments* arguments = reinterpret_cast(args); + ASSERT(arguments->thread()->isolate() == Isolate::Current()); + ASSERT_CALLBACK_STATE(arguments->thread()); arguments->SetReturn(Bool::Get(retval)); } @@ -4839,6 +4842,7 @@ DART_EXPORT void Dart_SetIntegerReturnValue(Dart_NativeArguments args, int64_t retval) { NativeArguments* arguments = reinterpret_cast(args); ASSERT(arguments->thread()->isolate() == Isolate::Current()); + ASSERT_CALLBACK_STATE(arguments->thread()); if (Smi::IsValid(retval)) { Api::SetSmiReturnValue(arguments, static_cast(retval)); } else { @@ -4852,6 +4856,7 @@ DART_EXPORT void Dart_SetIntegerReturnValue(Dart_NativeArguments args, DART_EXPORT void Dart_SetDoubleReturnValue(Dart_NativeArguments args, double retval) { NativeArguments* arguments = reinterpret_cast(args); + ASSERT(arguments->thread()->isolate() == Isolate::Current()); ASSERT_CALLBACK_STATE(arguments->thread()); TransitionNativeToVM transition(arguments->thread()); Api::SetDoubleReturnValue(arguments, retval);