Support to multi-threading and pthread interface (POSIX.1-2008) (#23)
[lunaix-os.git] / lunaix-os / includes / lunaix / mm / cake.h
index 81321f87b898c7ce1b6bd05b50f35d342dc5d8ff..bf92b268e21cb228a88a2397352436ac5ce3eb1c 100644 (file)
@@ -2,10 +2,11 @@
 #define __LUNAIX_CAKE_H
 
 #include <lunaix/ds/llist.h>
+#include <lunaix/spike.h>
 
 #define PILE_NAME_MAXLEN 20
 
-#define PILE_CACHELINE 1
+#define PILE_ALIGN_CACHE 1
 
 struct cake_pile;
 
@@ -17,12 +18,12 @@ struct cake_pile
     struct llist_header full;
     struct llist_header partial;
     struct llist_header free;
-    unsigned int offset;
-    unsigned int piece_size;
-    unsigned int cakes_count;
-    unsigned int alloced_pieces;
-    unsigned int pieces_per_cake;
-    unsigned int pg_per_cake;
+    u32_t offset;
+    u32_t piece_size;
+    u32_t cakes_count;
+    u32_t alloced_pieces;
+    u32_t pieces_per_cake;
+    u32_t pg_per_cake;
     char pile_name[PILE_NAME_MAXLEN];
 
     pile_cb ctor;
@@ -30,7 +31,7 @@ struct cake_pile
 
 typedef unsigned int piece_index_t;
 
-#define EO_FREE_PIECE (-1)
+#define EO_FREE_PIECE ((u32_t)-1)
 
 struct cake_s
 {
@@ -87,4 +88,13 @@ cake_export();
 void
 cake_ctor_zeroing(struct cake_pile* pile, void* piece);
 
+#define DEADCAKE_MARK 0xdeadcafeUL
+
+static inline void
+cake_ensure_valid(void* area) {
+    if (unlikely(*(unsigned int*)area == DEADCAKE_MARK)) {
+        fail("access to freed cake piece");
+    }
+}
+
 #endif /* __LUNAIX_VALLOC_H */