aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-02-22 14:01:39 +0000
committergingerBill <bill@gingerbill.org>2024-02-22 14:01:39 +0000
commitfea38f6910f4abb037e2581f28d7592c31991efe (patch)
treea448009a5f40fb4cd7d6be0dec5e0d2869e14b41
parent213b2fd0f8059751b0cdd05b904c49109b21d474 (diff)
Minor changes to futex implementation on Linux
-rw-r--r--src/check_expr.cpp6
-rw-r--r--src/threading.cpp2
2 files changed, 5 insertions, 3 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 11eb4b533..685bcdd6e 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -1241,7 +1241,7 @@ gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, T
}
case Type_Pointer:
if (source->kind == Type_Pointer) {
- isize level = check_is_assignable_to_using_subtype(source->Pointer.elem, poly->Pointer.elem);
+ isize level = check_is_assignable_to_using_subtype(source->Pointer.elem, poly->Pointer.elem, /*level*/0, /*src_is_ptr*/false, /*allow_polymorphic*/true);
if (level > 0) {
return true;
}
@@ -1413,7 +1413,9 @@ gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, T
return ok;
}
- // return check_is_assignable_to(c, &o, poly);
+
+ // NOTE(bill): Check for subtypes of
+ // return check_is_assignable_to(c, &o, poly); // && is_type_subtype_of_and_allow_polymorphic(o.type, poly);
}
return false;
case Type_Tuple:
diff --git a/src/threading.cpp b/src/threading.cpp
index 725b58c89..684b13bc3 100644
--- a/src/threading.cpp
+++ b/src/threading.cpp
@@ -656,7 +656,7 @@ gb_internal void futex_wait(Futex *addr, Footex val) {
for (;;) {
int ret = syscall(SYS_futex, addr, FUTEX_WAIT | FUTEX_PRIVATE_FLAG, val, NULL, NULL, 0);
if (ret == -1) {
- if (errno != EAGAIN) {
+ if (errno != EAGAIN && errno != EINTR) {
perror("Futex wait");
GB_PANIC("Failed in futex wait!\n");
} else {