aboutsummaryrefslogtreecommitdiff
path: root/core/salis.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/salis.c')
-rw-r--r--core/salis.c89
1 files changed, 19 insertions, 70 deletions
diff --git a/core/salis.c b/core/salis.c
index ed96944..f6d259f 100644
--- a/core/salis.c
+++ b/core/salis.c
@@ -26,7 +26,6 @@
#define UINT64_HALF 0x8000000000000000ul
#if defined(DATA_PUSH)
-#define DATA_PUSH_BUSY_TIMEOUT 600000
#define EVENT_ARRAYS(core) \
EVENT_ARRAY(core, 0, aev) /* allocation events array */ \
EVENT_ARRAY(core, 1, eev) /* executions events array */ \
@@ -93,16 +92,20 @@ const struct Proc g_dead_proc;
char g_asav_pbuf[AUTOSAVE_NAME_LEN];
#endif
+// Each UI must install these logger functions before salis_init() gets invoked
+void (*g_info)(const char *fmt, ...);
+void (*g_warn)(const char *fmt, ...);
+
#if defined(DATA_PUSH)
-sqlite3 *g_sim_data;
+// Include custom SQL wrapper
+// This is also used by the data-server
+sqlite3 *g_sim_db;
+#include "sql.c"
+
thrd_t g_eva_thrds[CORES][EVENT_ARRAYS_COUNT];
struct DeflateParams g_eva_deflate_params[CORES][EVENT_ARRAYS_COUNT];
#endif
-// Each UI must install these logger functions before salis_init() gets invoked
-void (*g_info)(const char *fmt, ...);
-void (*g_warn)(const char *fmt, ...);
-
// Each architecture must define these functions
#if defined(COMMAND_NEW)
void arch_core_init(struct Core *core);
@@ -730,63 +733,9 @@ void salis_auto_save(void) {
#endif
#if defined(DATA_PUSH)
-void salis_exec_sql(int blob_cnt, const void **blobs, const int *blob_sizes, const char *sql_format, ...) {
- assert(sql_format);
-
- va_list args;
- va_start(args, sql_format);
- int sql_len = vsnprintf(NULL, 0, sql_format, args) + 1;
- char *sql_str = malloc(sql_len);
- assert(sql_str);
- va_end(args);
-
- va_start(args, sql_format);
- vsprintf(sql_str, sql_format, args);
- va_end(args);
-
- FILE *temp = fopen("/tmp/salis.temp", "a");
- fprintf(temp, "EXECUTING SQL: %s\n", sql_str);
- fclose(temp);
-
- int sql_res;
- sqlite3_stmt *sql_stmt;
-
- sql_res = sqlite3_prepare_v2(g_sim_data, sql_str, -1, &sql_stmt, NULL);
- assert(sql_res == SQLITE_OK);
- free(sql_str);
-
- for (int i = 0; i < blob_cnt; ++i) {
- assert(blobs[i]);
- sql_res = sqlite3_bind_blob(sql_stmt, i + 1, blobs[i], blob_sizes[i], SQLITE_STATIC);
- assert(sql_res == SQLITE_OK);
- }
-
- // Only handle SQLITE_BUSY error, in which case we retry the query.
- // Setting 'journal_mode=wal;' should help prevent busy database errors.
- while (true) {
- sql_res = sqlite3_step(sql_stmt);
-
- if (sql_res == SQLITE_DONE || sql_res == SQLITE_ROW) {
- break;
- }
-
- g_warn("SQLite database returned error %d with message:", sql_res);
- g_warn(sqlite3_errmsg(g_sim_data));
-
- if (sql_res == SQLITE_BUSY) {
- g_info("Will retry query...");
- continue;
- }
-
- assert(false);
- }
-
- sqlite3_finalize(sql_stmt);
-}
-
#if defined(COMMAND_NEW)
void salis_push_data_header(void) {
- assert(g_sim_data);
+ assert(g_sim_db);
g_info("Creating core table in SQLite database");
salis_exec_sql(
@@ -820,7 +769,7 @@ void salis_push_data_header(void) {
#endif
void salis_push_data_line(void) {
- assert(g_sim_data);
+ assert(g_sim_db);
// Measure average membory block sizes
double amb0[CORES] = { 0 };
@@ -975,11 +924,11 @@ void salis_init(void) {
#endif
#if defined(DATA_PUSH)
- sqlite3_open(DATA_PUSH_PATH, &g_sim_data);
- assert(g_sim_data);
+ sqlite3_open(DATA_PUSH_PATH, &g_sim_db);
+ assert(g_sim_db);
// Install busy handler to retry transactions if DB is locked
- sqlite3_busy_timeout(g_sim_data, DATA_PUSH_BUSY_TIMEOUT);
+ sqlite3_busy_timeout(g_sim_db, DATA_PUSH_BUSY_TIMEOUT);
// Enable Write-Ahead Logging (WAL)
// This seems to help prevent DB locks when displaying live data.
@@ -1046,11 +995,11 @@ void salis_load(void) {
#endif
#if defined(DATA_PUSH)
- sqlite3_open(DATA_PUSH_PATH, &g_sim_data);
- assert(g_sim_data);
+ sqlite3_open(DATA_PUSH_PATH, &g_sim_db);
+ assert(g_sim_db);
// Install busy handler to retry transactions if DB is locked
- sqlite3_busy_timeout(g_sim_data, DATA_PUSH_BUSY_TIMEOUT);
+ sqlite3_busy_timeout(g_sim_db, DATA_PUSH_BUSY_TIMEOUT);
#endif
}
#endif
@@ -1182,8 +1131,8 @@ void salis_step(uint64_t ns) {
void salis_free(void) {
#if defined(DATA_PUSH)
- assert(g_sim_data);
- sqlite3_close(g_sim_data);
+ assert(g_sim_db);
+ sqlite3_close(g_sim_db);
#endif
for (int i = 0; i < CORES; ++i) {