* @brief Thread functions.
*/
-#include "libthreads.h"
+#include <string.h>
+
+#include <threads.h>
#include "common.h"
-#include "threads.h"
+#include "threads-model.h"
/* global "model" object */
#include "model.h"
* Provides a startup wrapper for each thread, allowing some initial
* model-checking data to be recorded. This method also gets around makecontext
* not being 64-bit clean
- * @todo We should make the START event always immediately follow the
- * CREATE event, so we don't get redundant traces...
*/
void thread_startup()
{
}
}
+/**
+ * @brief Construct a new model-checker Thread
+ *
+ * A model-checker Thread is used for accounting purposes only. It will never
+ * have its own stack, and it should never be inserted into the Scheduler.
+ *
+ * @param tid The thread ID to assign
+ */
+Thread::Thread(thread_id_t tid) :
+ parent(NULL),
+ creation(NULL),
+ pending(NULL),
+ start_routine(NULL),
+ arg(NULL),
+ stack(NULL),
+ user_thread(NULL),
+ id(tid),
+ state(THREAD_READY), /* Thread is always ready? */
+ wait_list(),
+ last_action_val(0),
+ model_thread(true)
+{
+ memset(&context, 0, sizeof(context));
+}
+
/**
* Construct a new thread.
* @param t The thread identifier of the newly created thread.
user_thread(t),
state(THREAD_CREATED),
wait_list(),
- last_action_val(VALUE_NONE)
+ last_action_val(VALUE_NONE),
+ model_thread(false)
{
int ret;
/* Initialize state */
ret = create_context();
if (ret)
- printf("Error in create_context\n");
+ model_print("Error in create_context\n");
id = model->get_next_id();
*user_thread = id;
}
/** @return The thread_id_t corresponding to this Thread object. */
-thread_id_t Thread::get_id()
+thread_id_t Thread::get_id() const
{
return id;
}