[orbis-kernel] Debugging

This commit is contained in:
Ivan Chikish 2023-07-05 11:38:31 +03:00
parent 4029711c2d
commit ed7580b322
3 changed files with 13 additions and 7 deletions

View file

@ -122,6 +122,8 @@ struct Module final {
unsigned _total_size = 0;
void incRef() {
if (_total_size != sizeof(Module))
std::abort();
if (references.fetch_add(1, std::memory_order::relaxed) > 512) {
assert(!"too many references");
}

View file

@ -6,7 +6,7 @@
#include <utility>
namespace orbis {
template <typename T, typename... Args> T *knew(Args &&...args);
//template <typename T, typename... Args> T *knew(Args &&...args);
inline namespace utils {
void kfree(void* ptr, std::size_t size);
@ -17,6 +17,8 @@ struct RcBase {
virtual ~RcBase() = default;
void incRef() {
if (!_total_size)
std::abort();
if (references.fetch_add(1, std::memory_order::relaxed) > 512) {
assert(!"too many references");
}
@ -120,10 +122,10 @@ public:
auto operator<=>(const Ref &other) const = default;
};
template <WithRc T, typename... ArgsT>
requires(std::is_constructible_v<T, ArgsT...>)
Ref<T> kcreate(ArgsT &&...args) {
return Ref<T>(knew<T>(std::forward<ArgsT>(args)...));
}
// template <WithRc T, typename... ArgsT>
// requires(std::is_constructible_v<T, ArgsT...>)
// Ref<T> kcreate(ArgsT &&...args) {
// return Ref<T>(knew<T>(std::forward<ArgsT>(args)...));
// }
} // namespace utils
} // namespace orbis