diff --git a/test.c b/test.c index 00d02a5..f564d31 100644 --- a/test.c +++ b/test.c @@ -10,15 +10,18 @@ int main(int argc, char **argv) { int retval; - char *dbname = "./my-db"; - if (argc > 1) - dbname = argv[1]; + if (argc < 3) { + printf("usage: %s \n", argv[0]); + return 1; + } + char *locator = argv[1]; + char *dbname = argv[2]; //sqlite3_vfs *vfs = sqlite3_vfs_find("unix"); //assert(vfs != NULL); //retval = sqlite3_vfs_register(vfs, 1); SQLITE_RCVFS_CONNECTION *conn = - sqlite3_rcvfs_connect("zk:localhost:2181", "main", "sqlite3"); + sqlite3_rcvfs_connect(locator, "main", "sqlite3"); assert(conn != NULL); retval = sqlite3_vfs_register(sqlite3_rcvfs("ramcloud", conn), 1); assert(retval == 0); diff --git a/test2.c b/test2.c index 6806218..903db86 100644 --- a/test2.c +++ b/test2.c @@ -62,15 +62,18 @@ static void *mainThread(void *data) { int main(int argc, char **argv) { int retval; - dbname = "./my-db"; - if (argc > 1) - dbname = argv[1]; + if (argc < 3) { + printf("usage: %s \n", argv[0]); + return 1; + } + char *locator = argv[1]; + dbname = argv[2]; //sqlite3_vfs *vfs = sqlite3_vfs_find("unix"); //assert(vfs != NULL); //retval = sqlite3_vfs_register(vfs, 1); SQLITE_RCVFS_CONNECTION *conn = - sqlite3_rcvfs_connect("zk:localhost:2181", "main", "sqlite3"); + sqlite3_rcvfs_connect(locator, "main", "sqlite3"); assert(conn != NULL); retval = sqlite3_vfs_register(sqlite3_rcvfs("ramcloud", conn), 1); assert(retval == 0); diff --git a/test3.c b/test3.c index 3bc5b53..558b0b6 100644 --- a/test3.c +++ b/test3.c @@ -10,15 +10,18 @@ int main(int argc, char **argv) { int retval; - char *dbname = "./my-db"; - if (argc > 1) - dbname = argv[1]; + if (argc < 3) { + printf("usage: %s \n", argv[0]); + return 1; + } + char *locator = argv[1]; + char *dbname = argv[2]; //sqlite3_vfs *vfs = sqlite3_vfs_find("unix"); //assert(vfs != NULL); //retval = sqlite3_vfs_register(vfs, 1); SQLITE_RCVFS_CONNECTION *conn = - sqlite3_rcvfs_connect("zk:localhost:2181", "main", "sqlite3"); + sqlite3_rcvfs_connect(locator, "main", "sqlite3"); assert(conn != NULL); retval = sqlite3_vfs_register(sqlite3_rcvfs("ramcloud", conn), 1); assert(retval == 0); diff --git a/vfs-ramcloud.c b/vfs-ramcloud.c index 050f23c..b09441f 100644 --- a/vfs-ramcloud.c +++ b/vfs-ramcloud.c @@ -370,10 +370,12 @@ void sqlite3_rcvfs_disconnect(SQLITE_RCVFS_CONNECTION *conn) { sqlite3_rcvfs_tls_destructor((void *)rcs); } pthread_key_delete(conn->tls); - sqlite3_free(conn->locator); - sqlite3_free(conn->cluster_name); - sqlite3_free(conn->table_name); - sqlite3_free(conn); + if (conn) { + if (conn->locator) sqlite3_free(conn->locator); + if (conn->cluster_name) sqlite3_free(conn->cluster_name); + if (conn->table_name) sqlite3_free(conn->table_name); + sqlite3_free(conn); + } } @@ -1422,6 +1424,10 @@ int sqlite3_rcvfs_upload(SQLITE_RCVFS_CONNECTION *conn, const char *path) { f.permanentSize = f.handle.size; f.blockBuffer = (SQLITE_RCVFS_WBUFFER *) sqlite3_malloc(sizeof(SQLITE_RCVFS_WBUFFER)); + if (!f.blockBuffer) { + fclose(fsrc); + return SQLITE_NOMEM; + } f.blockBuffer->gauge = 0; unsigned i; for (i = 0; i < SQLITE_RCVFS_WBUF_NBLOCKS; ++i) @@ -1436,12 +1442,14 @@ int sqlite3_rcvfs_upload(SQLITE_RCVFS_CONNECTION *conn, const char *path) { retval = rcBufferedWrite(rcs, &f, buf, nbytes, iOfst); if (retval != SQLITE_OK) { rcClose((struct sqlite3_file *)&f); + fclose(fsrc); return retval; } iOfst += nbytes; } while (1); retval = rcSync((struct sqlite3_file *)&f, 0); rcClose((struct sqlite3_file *)&f); + fclose(fsrc); return retval; } @@ -1481,6 +1489,10 @@ int sqlite3_rcvfs_download(SQLITE_RCVFS_CONNECTION *conn, const char *path) { f.permanentSize = f.handle.size; f.blockBuffer = (SQLITE_RCVFS_WBUFFER *) sqlite3_malloc(sizeof(SQLITE_RCVFS_WBUFFER)); + if (!f.blockBuffer) { + fclose(fdst); + return SQLITE_NOMEM; + } f.blockBuffer->gauge = 0; unsigned i; for (i = 0; i < SQLITE_RCVFS_WBUF_NBLOCKS; ++i)