/** Use private memory segment instead of shared memory */
u8 use_private_segment;
+
+ /** Use one or more private mheaps, instead of the global heap */
+ u32 private_segment_count;
+ u32 private_segment_size;
} segment_manager_properties_t;
typedef struct _segment_manager
/** Owner app index */
u32 app_index;
- /** Pointer to manager properties. Could be shared among all of
- * an app's segment managers s*/
+ /**
+ * Pointer to manager properties. Could be shared among all of
+ * an app's segment managers s
+ */
segment_manager_properties_t *properties;
+
+ /**
+ * First segment should not be deleted unless segment manger is deleted.
+ * This also indicates that the segment manager is the first to have been
+ * allocated for the app.
+ */
+ u8 first_is_protected;
} segment_manager_t;
+#define SEGMENT_MANAGER_INVALID_APP_INDEX ((u32) ~0)
+
/** Pool of segment managers */
extern segment_manager_t *segment_managers;
-always_inline segment_manager_t *
-segment_manager_new ()
-{
- segment_manager_t *sm;
- pool_get (segment_managers, sm);
- memset (sm, 0, sizeof (*sm));
- return sm;
-}
-
always_inline segment_manager_t *
segment_manager_get (u32 index)
{
return sm - segment_managers;
}
+segment_manager_t *segment_manager_new ();
int
segment_manager_init (segment_manager_t * sm,
segment_manager_properties_t * properties,
int
session_manager_add_first_segment (segment_manager_t * sm, u32 segment_size);
int session_manager_add_segment (segment_manager_t * sm);
+void segment_manager_del_sessions (segment_manager_t * sm);
void segment_manager_del (segment_manager_t * sm);
+void segment_manager_init_del (segment_manager_t * sm);
+u8 segment_manager_has_fifos (segment_manager_t * sm);
int
segment_manager_alloc_session_fifos (segment_manager_t * sm,
svm_fifo_t ** server_rx_fifo,