942 } |
942 } |
943 } |
943 } |
944 |
944 |
945 srand((unsigned)&ThreadFunc); |
945 srand((unsigned)&ThreadFunc); |
946 |
946 |
947 PrintS("Thread \"%s\" - begin\r\n", (char*)pname); |
947 ThreadPrintS("Thread \"%s\" - begin\r\n", (char*)pname); |
948 err = sqlite3_open(TheTestDbName, &db); |
948 err = sqlite3_open(TheTestDbName, &db); |
949 TEST2(err, SQLITE_OK); |
949 TEST2(err, SQLITE_OK); |
950 TEST(db != 0); |
950 TEST(db != 0); |
951 |
951 |
952 while(records < KRecordsCount) |
952 while(records < KRecordsCount) |
953 { |
953 { |
954 if((records % 10) == 0) |
954 if((records % 10) == 0) |
955 { |
955 { |
956 PrintSI("Thread \"%s\", %d records.\r\n", (char*)pname, records); |
956 ThreadPrintSI("Thread \"%s\", %d records.\r\n", (char*)pname, records); |
957 } |
957 } |
958 err = sqlite3_exec(db, "BEGIN", 0, 0, &errmsg); |
958 err = sqlite3_exec(db, "BEGIN", 0, 0, &errmsg); |
959 if(err == SQLITE_OK) |
959 if(err == SQLITE_OK) |
960 { |
960 { |
961 err = sqlite3_exec(db, "INSERT INTO A VALUES(0,0,0.0,'',x'00')", 0, 0, &errmsg); |
961 err = sqlite3_exec(db, "INSERT INTO A VALUES(0,0,0.0,'',x'00')", 0, 0, &errmsg); |
982 { |
982 { |
983 char fmt[100]; |
983 char fmt[100]; |
984 strcpy(fmt, "Thread \""); |
984 strcpy(fmt, "Thread \""); |
985 strcat(fmt, (char*)pname); |
985 strcat(fmt, (char*)pname); |
986 strcat(fmt, "\". Err msg: %s. Err: %d.\r\n"); |
986 strcat(fmt, "\". Err msg: %s. Err: %d.\r\n"); |
987 PrintSI(fmt, errmsg, err); |
987 ThreadPrintSI(fmt, errmsg, err); |
988 sqlite3_free(errmsg); |
988 sqlite3_free(errmsg); |
989 errmsg = 0; |
989 errmsg = 0; |
990 } |
990 } |
991 usleep((rand() % 3000) + 500); |
991 usleep((rand() % 3000) + 500); |
992 } |
992 } |
993 } |
993 } |
994 |
994 |
995 err = sqlite3_close(db); |
995 err = sqlite3_close(db); |
996 TEST2(err, SQLITE_OK); |
996 TEST2(err, SQLITE_OK); |
997 |
997 |
998 PrintS("Thread \"%s\" - end\r\n", (char*)pname); |
998 ThreadPrintS("Thread \"%s\" - end\r\n", (char*)pname); |
999 return &TheInsertRecCnt[threadIdx]; |
999 return &TheInsertRecCnt[threadIdx]; |
1000 } |
1000 } |
1001 |
1001 |
1002 /** |
1002 /** |
1003 @SYMTestCaseID SYSLIB-SQLITE3-UT-4007 |
1003 @SYMTestCaseID SYSLIB-SQLITE3-UT-4007 |
1080 (void)sem_post(&TheSemaphores[1]);/* The database is unlocked. Notify thread 2 to attempt the INSERT operation again */ |
1080 (void)sem_post(&TheSemaphores[1]);/* The database is unlocked. Notify thread 2 to attempt the INSERT operation again */ |
1081 |
1081 |
1082 err = sqlite3_close(db); |
1082 err = sqlite3_close(db); |
1083 TEST2(err, SQLITE_OK); |
1083 TEST2(err, SQLITE_OK); |
1084 |
1084 |
1085 PrintS("Thread \"%s\" - end\r\n", KThreadNames[0]); |
1085 ThreadPrintS("Thread \"%s\" - end\r\n", KThreadNames[0]); |
1086 return 0; |
1086 return 0; |
1087 } |
1087 } |
1088 |
1088 |
1089 static void* ThreadFunc2(void* parg) |
1089 static void* ThreadFunc2(void* parg) |
1090 { |
1090 { |
1091 int err; |
1091 int err; |
1092 sqlite3* db; |
1092 sqlite3* db; |
1093 |
1093 |
1094 UNUSED_ARG(parg); |
1094 UNUSED_ARG(parg); |
1095 PrintS("Thread \"%s\" - begin\r\n", KThreadNames[1]); |
1095 ThreadPrintS("Thread \"%s\" - begin\r\n", KThreadNames[1]); |
1096 |
1096 |
1097 err = sqlite3_open(TheTestDbName, &db); |
1097 err = sqlite3_open(TheTestDbName, &db); |
1098 TEST2(err, SQLITE_OK); |
1098 TEST2(err, SQLITE_OK); |
1099 TEST(db != 0); |
1099 TEST(db != 0); |
1100 |
1100 |
1110 TEST2(err, SQLITE_OK); |
1110 TEST2(err, SQLITE_OK); |
1111 |
1111 |
1112 err = sqlite3_close(db); |
1112 err = sqlite3_close(db); |
1113 TEST2(err, SQLITE_OK); |
1113 TEST2(err, SQLITE_OK); |
1114 |
1114 |
1115 PrintS("Thread \"%s\" - end\r\n", KThreadNames[1]); |
1115 ThreadPrintS("Thread \"%s\" - end\r\n", KThreadNames[1]); |
1116 return 0; |
1116 return 0; |
1117 } |
1117 } |
1118 |
1118 |
1119 /** |
1119 /** |
1120 @SYMTestCaseID SYSLIB-SQLITE3-UT-4008 |
1120 @SYMTestCaseID SYSLIB-SQLITE3-UT-4008 |