Slight FFI tweaks to make deno less crashy on macos
This commit is contained in:
parent
15496646d6
commit
f19fc1d2e0
@ -37,12 +37,20 @@ try {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const { tcgetattr, tcsetattr, cfmakeraw } = cStdLib.symbols;
|
const { tcgetattr, tcsetattr, cfmakeraw } = cStdLib.symbols;
|
||||||
|
let closed = false;
|
||||||
const BunFFI: IFFI = {
|
const BunFFI: IFFI = {
|
||||||
tcgetattr,
|
tcgetattr,
|
||||||
tcsetattr,
|
tcsetattr,
|
||||||
cfmakeraw,
|
cfmakeraw,
|
||||||
getPointer: ptr,
|
getPointer: ptr,
|
||||||
close: cStdLib.close,
|
close: () => {
|
||||||
|
if (!closed) {
|
||||||
|
cStdLib.close();
|
||||||
|
closed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do nothing if FFI library was already closed
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default BunFFI;
|
export default BunFFI;
|
||||||
|
@ -43,7 +43,7 @@ class Termios {
|
|||||||
* The pointer to the termios struct
|
* The pointer to the termios struct
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
#ptr: unknown;
|
readonly #ptr: unknown;
|
||||||
|
|
||||||
constructor(ffi: IFFI) {
|
constructor(ffi: IFFI) {
|
||||||
this.#ffi = ffi;
|
this.#ffi = ffi;
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
// Deno-specific ffi code
|
// Deno-specific ffi code
|
||||||
import { IFFI } from '../common/runtime.ts';
|
import { IFFI } from '../common/runtime.ts';
|
||||||
|
|
||||||
let libSuffix = '';
|
let suffix = '';
|
||||||
switch (Deno.build.os) {
|
switch (Deno.build.os) {
|
||||||
case 'windows':
|
case 'windows':
|
||||||
libSuffix = 'dll';
|
suffix = 'dll';
|
||||||
break;
|
break;
|
||||||
case 'darwin':
|
case 'darwin':
|
||||||
libSuffix = 'dylib';
|
suffix = 'dylib';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
libSuffix = 'so.6';
|
suffix = 'so.6';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
const cSharedLib = `libc.${libSuffix}`;
|
const cSharedLib = `libc.${suffix}`;
|
||||||
const cStdLib = Deno.dlopen(
|
const cStdLib = Deno.dlopen(
|
||||||
cSharedLib,
|
cSharedLib,
|
||||||
{
|
{
|
||||||
@ -41,8 +41,11 @@ const DenoFFI: IFFI = {
|
|||||||
cfmakeraw,
|
cfmakeraw,
|
||||||
getPointer: Deno.UnsafePointer.of,
|
getPointer: Deno.UnsafePointer.of,
|
||||||
close: () => {
|
close: () => {
|
||||||
if (closed === false) {
|
if (!closed) {
|
||||||
cStdLib.close();
|
// Closing appears to do bad things on macOS
|
||||||
|
if (Deno.build.os !== 'darwin') {
|
||||||
|
cStdLib.close();
|
||||||
|
}
|
||||||
closed = true;
|
closed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user