diff options
author | Jan Mercl <0xjnml@gmail.com> | 2017-07-15 22:00:16 +0200 |
---|---|---|
committer | Jan Mercl <0xjnml@gmail.com> | 2017-07-15 22:00:16 +0200 |
commit | 1b11dbb188f57e3e9f227bda4796722dc74e233b (patch) | |
tree | ca8e1a5dabf2ff67030e401a213eb255a1e19259 /internal/threadtest4/threadtest4_linux_386.go | |
parent | 43512da12520709267eb7cfa33d9e68ec97a2aaf (diff) |
Regenerate Linux/386 using lates CCGO.
modified: internal/bin/bin_linux_386.go
modified: internal/mptest/mptest_linux_386.go
modified: internal/threadtest1/threadtest1_linux_386.go
modified: internal/threadtest2/threadtest2_linux_386.go
modified: internal/threadtest3/threadtest3_linux_386.go
modified: internal/threadtest4/threadtest4_linux_386.go
Diffstat (limited to 'internal/threadtest4/threadtest4_linux_386.go')
-rw-r--r-- | internal/threadtest4/threadtest4_linux_386.go | 568 |
1 files changed, 300 insertions, 268 deletions
diff --git a/internal/threadtest4/threadtest4_linux_386.go b/internal/threadtest4/threadtest4_linux_386.go index 60b3c65..9a25b43 100644 --- a/internal/threadtest4/threadtest4_linux_386.go +++ b/internal/threadtest4/threadtest4_linux_386.go @@ -1,36 +1,36 @@ // Code generated by ccgo. DO NOT EDIT. -// threadtest4.c - -// 2014-12-11 -// -// The author disclaims copyright to this source code. In place of -// a legal notice, here is a blessing: -// -// May you do good and not evil. -// May you find forgiveness for yourself and forgive others. -// May you share freely, never taking more than you give. -// -// ************************************************************************* -// This file implements a simple standalone program used to stress the -// SQLite library when accessing the same set of databases simultaneously -// from multiple threads in shared-cache mode. -// -// This test program runs on unix-like systems only. It uses pthreads. -// To compile: -// -// gcc -g -Wall -I. threadtest4.c sqlite3.c -ldl -lpthread -// -// To run: -// -// ./a.out 10 -// -// The argument is the number of threads. There are also options, such -// as -wal and -multithread and -serialized. -// -// Consider also compiling with clang instead of gcc and adding the -// -fsanitize=thread option. - +// threadtest4 +// /* +// ** 2014-12-11 +// ** +// ** The author disclaims copyright to this source code. In place of +// ** a legal notice, here is a blessing: +// ** +// ** May you do good and not evil. +// ** May you find forgiveness for yourself and forgive others. +// ** May you share freely, never taking more than you give. +// ** +// ************************************************************************* +// ** This file implements a simple standalone program used to stress the +// ** SQLite library when accessing the same set of databases simultaneously +// ** from multiple threads in shared-cache mode. +// ** +// ** This test program runs on unix-like systems only. It uses pthreads. +// ** To compile: +// ** +// ** gcc -g -Wall -I. threadtest4.c sqlite3.c -ldl -lpthread +// ** +// ** To run: +// ** +// ** ./a.out 10 +// ** +// ** The argument is the number of threads. There are also options, such +// ** as -wal and -multithread and -serialized. +// ** +// ** Consider also compiling with clang instead of gcc and adding the +// ** -fsanitize=thread option. +// */ package main import ( @@ -68,13 +68,13 @@ var X__stdfiles [3]unsafe.Pointer var Xstdout unsafe.Pointer func init() { - Xstdout = (unsafe.Pointer)(uintptr(unsafe.Pointer(&X__stdfiles)) + 4) + Xstdout = unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdfiles)) + 4) } var Xstderr unsafe.Pointer func init() { - Xstderr = (unsafe.Pointer)(uintptr(unsafe.Pointer(&X__stdfiles)) + 8) + Xstderr = unsafe.Pointer(uintptr(unsafe.Pointer(&X__stdfiles)) + 8) } func Xmain(tls *crt.TLS, _argc int32, _argv **int8) (r0 int32) { @@ -85,104 +85,88 @@ func Xmain(tls *crt.TLS, _argc int32, _argv **int8) (r0 int32) { var _wrMutex crt.Xpthread_mutex_t var _infoTop XWorkerInfo var _aInfo, _p *XWorkerInfo - r0 = i32(0) - _nWorker = i32(0) - _wkrFlags = u32(0) - _nErr = i32(0) - _nTest = i32(0) + r0 = int32(0) + _nWorker = int32(0) + _wkrFlags = uint32(0) + _nErr = int32(0) + _nTest = int32(0) _db = nil - bin.Xsqlite3_config(tls, i32(2)) - _i = i32(1) + bin.Xsqlite3_config(tls, int32(2)) + _i = int32(1) _0: if _i >= _argc { goto _3 } - _1_z = *(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(_i))) - if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_1_z)) + 1*uintptr(i32(0))))) != i32(45) { + _1_z = *elem0(_argv, uintptr(_i)) + if int32(*elem1(_1_z, 0)) != int32(45) { goto _4 } - if (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_1_z)) + 1*uintptr(i32(1))))) == i32(45)) && (int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_1_z)) + 1*uintptr(i32(2))))) != i32(0)) { + if (int32(*elem1(_1_z, uintptr(1))) == int32(45)) && (int32(*elem1(_1_z, uintptr(2))) != int32(0)) { *(*uintptr)(unsafe.Pointer(&_1_z)) += uintptr(1) } - if crt.Xstrcmp(tls, _1_z, str(0)) == i32(0) { - bin.Xsqlite3_config(tls, i32(2)) - { - p := &_wkrFlags - *p = (*p) & uint32(i32(-2)) - sink0(*p) - } + if crt.Xstrcmp(tls, _1_z, str(0)) == int32(0) { + bin.Xsqlite3_config(tls, int32(2)) + _wkrFlags &= uint32(4294967294) goto _14 } - if crt.Xstrcmp(tls, _1_z, str(13)) == i32(0) { - bin.Xsqlite3_config(tls, i32(3)) - { - p := &_wkrFlags - *p = (*p) | uint32(i32(1)) - sink0(*p) - } + if crt.Xstrcmp(tls, _1_z, str(13)) == int32(0) { + bin.Xsqlite3_config(tls, int32(3)) + _wkrFlags |= uint32(1) goto _14 } - if crt.Xstrcmp(tls, _1_z, str(25)) == i32(0) { - { - p := &_wkrFlags - *p = (*p) | uint32(i32(2)) - sink0(*p) - } + if crt.Xstrcmp(tls, _1_z, str(25)) == int32(0) { + _wkrFlags |= uint32(2) goto _14 } - if crt.Xstrcmp(tls, _1_z, str(30)) == i32(0) { - { - p := &_wkrFlags - *p = (*p) | uint32(i32(4)) - sink0(*p) - } + if crt.Xstrcmp(tls, _1_z, str(30)) == int32(0) { + _wkrFlags |= uint32(4) goto _14 } - crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(37), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(_i))))) - crt.Xexit(tls, i32(1)) + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(37), unsafe.Pointer(*elem0(_argv, uintptr(_i)))) + crt.Xexit(tls, int32(1)) _14: goto _20 _4: - if int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_1_z)) + 1*uintptr(i32(0))))) < i32(49) || int32(*(*int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_1_z)) + 1*uintptr(i32(0))))) > i32(57) || _nWorker != i32(0) { + if int32(*elem1(_1_z, 0)) < int32(49) || int32(*elem1(_1_z, 0)) > int32(57) || _nWorker != int32(0) { goto _18 } _nWorker = crt.Xatoi(tls, _1_z) - if _nWorker < i32(2) { + if _nWorker < int32(2) { crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(70)) - crt.Xexit(tls, i32(1)) + crt.Xexit(tls, int32(1)) } goto _20 _18: - crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(92), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(_i))))) - crt.Xexit(tls, i32(1)) + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(92), unsafe.Pointer(*elem0(_argv, uintptr(_i)))) + crt.Xexit(tls, int32(1)) _20: _i += 1 goto _0 _3: - if _nWorker == i32(0) { - crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(127), unsafe.Pointer(*(**int8)(unsafe.Pointer(uintptr((unsafe.Pointer)(_argv)) + 4*uintptr(i32(0)))))) - crt.Xexit(tls, i32(1)) + if _nWorker == int32(0) { + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(127), unsafe.Pointer(*elem0(_argv, 0))) + crt.Xexit(tls, int32(1)) } if bin.Xsqlite3_threadsafe(tls) == 0 { crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(260)) - crt.Xexit(tls, i32(1)) + crt.Xexit(tls, int32(1)) } bin.Xsqlite3_initialize(tls) - bin.Xsqlite3_enable_shared_cache(tls, i32(1)) + bin.Xsqlite3_enable_shared_cache(tls, int32(1)) crt.Xpthread_mutex_init(tls, &_wrMutex, nil) crt.Xunlink(tls, str(299)) crt.Xunlink(tls, str(312)) crt.Xunlink(tls, str(325)) _rc = bin.Xsqlite3_open(tls, str(299), (**bin.Xsqlite3)(unsafe.Pointer(&_db))) - if _rc != i32(0) { + if _rc != int32(0) { crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(338)) - crt.Xexit(tls, i32(1)) + crt.Xexit(tls, int32(1)) } - crt.Xmemset(tls, (unsafe.Pointer)(&_infoTop), i32(0), u32(40)) - *(*unsafe.Pointer)(unsafe.Pointer(&(_infoTop.X4))) = _db - *(*uint32)(unsafe.Pointer(&(_infoTop.X2))) = _wkrFlags + crt.Xmemset(tls, unsafe.Pointer(&_infoTop), int32(0), uint32(40)) + _infoTop.Xdb = _db + _infoTop.XwkrFlags = _wkrFlags _p = &_infoTop - if (_wkrFlags & uint32(i32(2))) != 0 { + if (_wkrFlags & uint32(2)) != 0 { _run_sql(tls, _p, str(382)) } _run_sql(tls, _p, str(406)) @@ -197,212 +181,226 @@ _3: _run_sql(tls, _p, str(743)) _run_sql(tls, _p, str(805)) _run_sql(tls, _p, str(841)) - _aInfo = (*XWorkerInfo)(_safe_malloc(tls, int32(u32(40)*uint32(_nWorker)))) - crt.Xmemset(tls, (unsafe.Pointer)(_aInfo), i32(0), u32(40)*uint32(_nWorker)) - _i = i32(0) + _aInfo = (*XWorkerInfo)(_safe_malloc(tls, int32(uint32(40)*uint32(_nWorker)))) + crt.Xmemset(tls, unsafe.Pointer(_aInfo), int32(0), uint32(40)*uint32(_nWorker)) + _i = int32(0) _25: if _i >= _nWorker { goto _28 } - *(*int32)(unsafe.Pointer(&((*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo)) + 40*uintptr(_i))).X0))) = _i + i32(1) - *(*int32)(unsafe.Pointer(&((*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo)) + 40*uintptr(_i))).X1))) = _nWorker - *(*uint32)(unsafe.Pointer(&((*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo)) + 40*uintptr(_i))).X2))) = _wkrFlags - *(*unsafe.Pointer)(unsafe.Pointer(&((*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo)) + 40*uintptr(_i))).X3))) = _db - *(**crt.Xpthread_mutex_t)(unsafe.Pointer((*unsafe.Pointer)(unsafe.Pointer(&((*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo)) + 40*uintptr(_i))).X9))))) = &_wrMutex - _rc = crt.Xpthread_create(tls, (*uint32)(unsafe.Pointer(&((*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo)) + 40*uintptr(_i))).X8))), nil, _worker_thread, (unsafe.Pointer)((*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo))+40*uintptr(_i))))) - if _rc != i32(0) { - crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(876), _i+i32(1)) - crt.Xexit(tls, i32(1)) + elem2(_aInfo, uintptr(_i)).Xtid = _i + int32(1) + elem2(_aInfo, uintptr(_i)).XnWorker = _nWorker + elem2(_aInfo, uintptr(_i)).XwkrFlags = _wkrFlags + elem2(_aInfo, uintptr(_i)).XmainDb = _db + *(**crt.Xpthread_mutex_t)(unsafe.Pointer(&(elem2(_aInfo, uintptr(_i)).XpWrMutex))) = &_wrMutex + _rc = crt.Xpthread_create(tls, &(elem2(_aInfo, uintptr(_i)).Xid), nil, _worker_thread, unsafe.Pointer(elem2(_aInfo, uintptr(_i)))) + if _rc != int32(0) { + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(876), _i+int32(1)) + crt.Xexit(tls, int32(1)) } crt.Xsched_yield(tls) _i += 1 goto _25 _28: - _i = i32(0) + _i = int32(0) _30: if _i >= _nWorker { goto _33 } - crt.Xpthread_join(tls, (*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo))+40*uintptr(_i))).X8, nil) - crt.Xprintf(tls, str(914), (*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo))+40*uintptr(_i))).X0, (*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo))+40*uintptr(_i))).X5, (*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo))+40*uintptr(_i))).X6) - if ((*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo)) + 40*uintptr(_i))).X7) != nil { - crt.Xprintf(tls, str(954), unsafe.Pointer((*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo))+40*uintptr(_i))).X7)) + crt.Xpthread_join(tls, elem2(_aInfo, uintptr(_i)).Xid, nil) + crt.Xprintf(tls, str(914), elem2(_aInfo, uintptr(_i)).Xtid, elem2(_aInfo, uintptr(_i)).XnErr, elem2(_aInfo, uintptr(_i)).XnTest) + if (elem2(_aInfo, uintptr(_i)).XzMsg) != nil { + crt.Xprintf(tls, str(954), unsafe.Pointer(elem2(_aInfo, uintptr(_i)).XzMsg)) goto _35 } crt.Xprintf(tls, str(960)) _35: - { - p := &_nErr - *p = (*p) + ((*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo)) + 40*uintptr(_i))).X5) - sink1(*p) - } - { - p := &_nTest - *p = (*p) + ((*XWorkerInfo)(unsafe.Pointer(uintptr((unsafe.Pointer)(_aInfo)) + 40*uintptr(_i))).X6) - sink1(*p) - } + _nErr += elem2(_aInfo, uintptr(_i)).XnErr + _nTest += elem2(_aInfo, uintptr(_i)).XnTest crt.Xfflush(tls, (*crt.XFILE)(Xstdout)) _i += 1 goto _30 _33: bin.Xsqlite3_close(tls, (*bin.Xsqlite3)(_db)) - bin.Xsqlite3_free(tls, (unsafe.Pointer)(_aInfo)) + bin.Xsqlite3_free(tls, unsafe.Pointer(_aInfo)) crt.Xprintf(tls, str(962), _nErr, _nTest) return _nErr - - _ = _wrMutex - _ = _infoTop - panic(0) } -// Run a SQL statements. Panic if unable. +// C comment +// /* +// ** Run a SQL statements. Panic if unable. +// */ func _run_sql(tls *crt.TLS, _p *XWorkerInfo, _zFormat *int8, args ...interface{}) { - var _rc, _nRetry int32 + var _rc, _i, _nRetry int32 var _zSql *int8 var _pStmt unsafe.Pointer var _ap []interface{} _pStmt = nil - _nRetry = i32(0) + _nRetry = int32(0) _ap = args _zSql = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) _ap = nil - _check_oom(tls, (unsafe.Pointer)(_zSql)) - _rc = bin.Xsqlite3_prepare_v2(tls, (*bin.Xsqlite3)(_p.X4), _zSql, i32(-1), &_pStmt, nil) - if _rc != i32(0) { - crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(991), _rc, bin.Xsqlite3_extended_errcode(tls, (*bin.Xsqlite3)(_p.X4)), unsafe.Pointer(bin.Xsqlite3_errmsg(tls, (*bin.Xsqlite3)(_p.X4))), unsafe.Pointer(_zSql)) - crt.Xexit(tls, i32(1)) + _check_oom(tls, unsafe.Pointer(_zSql)) + _i = int32(0) +_0: + if _i >= int32(1000) { + goto _3 + } + _rc = bin.Xsqlite3_prepare_v2(tls, (*bin.Xsqlite3)(_p.Xdb), _zSql, int32(-1), &_pStmt, nil) + if _rc == int32(0) { + goto _3 + } + _i += 1 + goto _0 +_3: + if _rc != int32(0) { + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(991), _rc, bin.Xsqlite3_extended_errcode(tls, (*bin.Xsqlite3)(_p.Xdb)), unsafe.Pointer(bin.Xsqlite3_errmsg(tls, (*bin.Xsqlite3)(_p.Xdb))), unsafe.Pointer(_zSql)) + crt.Xexit(tls, int32(1)) } _worker_trace(tls, _p, str(1036), unsafe.Pointer(_zSql)) -_1: - if store1(&_rc, bin.Xsqlite3_step(tls, _pStmt)) == i32(101) { - goto _2 +_6: + if store3(&_rc, bin.Xsqlite3_step(tls, _pStmt)) == int32(101) { + goto _7 } - if (_rc&i32(255)) != i32(5) && (_rc&i32(255)) != i32(6) { - goto _4 + if (_rc&int32(255)) != int32(5) && (_rc&int32(255)) != int32(6) { + goto _9 } bin.Xsqlite3_reset(tls, _pStmt) _nRetry += 1 - if _nRetry < i32(10) { + if _nRetry < int32(10) { _worker_trace(tls, _p, str(1049), _nRetry, unsafe.Pointer(_zSql)) crt.Xsched_yield(tls) - goto _1 + goto _6 } - crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(1067), _p.X0, unsafe.Pointer(_zSql)) - crt.Xexit(tls, i32(1)) -_4: - if _rc != i32(100) { - crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(1109), _rc, bin.Xsqlite3_extended_errcode(tls, (*bin.Xsqlite3)(_p.X4)), unsafe.Pointer(bin.Xsqlite3_errmsg(tls, (*bin.Xsqlite3)(_p.X4))), unsafe.Pointer(_zSql)) - crt.Xexit(tls, i32(1)) + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(1067), _p.Xtid, unsafe.Pointer(_zSql)) + crt.Xexit(tls, int32(1)) +_9: + if _rc != int32(100) { + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(1109), _rc, bin.Xsqlite3_extended_errcode(tls, (*bin.Xsqlite3)(_p.Xdb)), unsafe.Pointer(bin.Xsqlite3_errmsg(tls, (*bin.Xsqlite3)(_p.Xdb))), unsafe.Pointer(_zSql)) + crt.Xexit(tls, int32(1)) } - goto _1 -_2: - bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zSql)) + goto _6 +_7: + bin.Xsqlite3_free(tls, unsafe.Pointer(_zSql)) bin.Xsqlite3_finalize(tls, _pStmt) } -// Report an OOM error and die if the argument is NULL +// C comment +// /* +// ** Report an OOM error and die if the argument is NULL +// */ func _check_oom(tls *crt.TLS, _x unsafe.Pointer) { if _x == nil { crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(1151)) - crt.Xexit(tls, i32(1)) + crt.Xexit(tls, int32(1)) } } -// Print a trace message for a worker +// C comment +// /* +// ** Print a trace message for a worker +// */ func _worker_trace(tls *crt.TLS, _p *XWorkerInfo, _zFormat *int8, args ...interface{}) { var _zMsg *int8 var _ap []interface{} - if ((_p.X2) & uint32(i32(4))) == uint32(i32(0)) { + if (_p.XwkrFlags & uint32(4)) == (0) { return } _ap = args _zMsg = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) - _check_oom(tls, (unsafe.Pointer)(_zMsg)) + _check_oom(tls, unsafe.Pointer(_zMsg)) _ap = nil - crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(1166), _p.X0, unsafe.Pointer(_zMsg)) - bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zMsg)) + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(1166), _p.Xtid, unsafe.Pointer(_zMsg)) + bin.Xsqlite3_free(tls, unsafe.Pointer(_zMsg)) } -// Allocate memory. If the allocation fails, print an error message and -// kill the process. +// C comment +// /* +// ** Allocate memory. If the allocation fails, print an error message and +// ** kill the process. +// */ func _safe_malloc(tls *crt.TLS, _sz int32) (r0 unsafe.Pointer) { var _x unsafe.Pointer _x = bin.Xsqlite3_malloc(tls, func() int32 { - if _sz > i32(0) { + if _sz > int32(0) { return _sz } - return i32(1) + return int32(1) }()) _check_oom(tls, _x) return _x } -// Each thread runs the following function. +// C comment +// /* +// ** Each thread runs the following function. +// */ func _worker_thread(tls *crt.TLS, _pArg unsafe.Pointer) (r0 unsafe.Pointer) { var _iOuter, _i, _rc int32 var _pStmt unsafe.Pointer var _p *XWorkerInfo _p = (*XWorkerInfo)(_pArg) - crt.Xprintf(tls, str(1183), _p.X0) + crt.Xprintf(tls, str(1183), _p.Xtid) crt.Xfflush(tls, (*crt.XFILE)(Xstdout)) - _iOuter = i32(1) + _iOuter = int32(1) _0: - if _iOuter > (_p.X1) { + if _iOuter > _p.XnWorker { goto _3 } _worker_open_connection(tls, _p, _iOuter) - _i = i32(0) + _i = int32(0) _4: - if _i >= i32(4) { + if _i >= int32(4) { goto _7 } - _worker_add_content(tls, _p, (_i*i32(100))+i32(1), (_i+i32(1))*i32(100), (((_p.X0)+_iOuter)%i32(3))+i32(1)) - _worker_add_content(tls, _p, (_i*i32(100))+i32(1), (_i+i32(1))*i32(100), ((((_p.X0)+_iOuter)+i32(1))%i32(3))+i32(1)) - _worker_add_content(tls, _p, (_i*i32(100))+i32(1), (_i+i32(1))*i32(100), ((((_p.X0)+_iOuter)+i32(2))%i32(3))+i32(1)) + _worker_add_content(tls, _p, (_i*int32(100))+int32(1), (_i+int32(1))*int32(100), ((_p.Xtid+_iOuter)%int32(3))+int32(1)) + _worker_add_content(tls, _p, (_i*int32(100))+int32(1), (_i+int32(1))*int32(100), (((_p.Xtid+_iOuter)+int32(1))%int32(3))+int32(1)) + _worker_add_content(tls, _p, (_i*int32(100))+int32(1), (_i+int32(1))*int32(100), (((_p.Xtid+_iOuter)+int32(2))%int32(3))+int32(1)) _i += 1 goto _4 _7: - _pStmt = _prep_sql(tls, _p.X4, str(1202), _p.X0) + _pStmt = _prep_sql(tls, _p.Xdb, str(1202), _p.Xtid) _worker_trace(tls, _p, str(1239), unsafe.Pointer(bin.Xsqlite3_sql(tls, _pStmt))) _rc = bin.Xsqlite3_step(tls, _pStmt) - if _rc != i32(100) { + if _rc != int32(100) { _worker_error(tls, _p, str(1250), unsafe.Pointer(bin.Xsqlite3_sql(tls, _pStmt))) goto _10 } - if bin.Xsqlite3_column_int(tls, _pStmt, i32(0)) != i32(400) { - _worker_error(tls, _p, str(1269), bin.Xsqlite3_column_int(tls, _pStmt, i32(0))) + if bin.Xsqlite3_column_int(tls, _pStmt, int32(0)) != int32(400) { + _worker_error(tls, _p, str(1269), bin.Xsqlite3_column_int(tls, _pStmt, int32(0))) } _10: bin.Xsqlite3_finalize(tls, _pStmt) - if (_p.X5) != 0 { + if _p.XnErr != 0 { goto _3 } - if ((_iOuter + (_p.X0)) % i32(3)) == i32(0) { - bin.Xsqlite3_db_release_memory(tls, (*bin.Xsqlite3)(_p.X4)) - *(*int32)(unsafe.Pointer(&(_p.X6))) += 1 + if ((_iOuter + _p.Xtid) % int32(3)) == int32(0) { + bin.Xsqlite3_db_release_memory(tls, (*bin.Xsqlite3)(_p.Xdb)) + _p.XnTest += 1 } - crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) + crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) _run_sql(tls, _p, str(1286)) _run_sql(tls, _p, str(1293)) _run_sql(tls, _p, str(1325)) _run_sql(tls, _p, str(1357)) _run_sql(tls, _p, str(1389)) - *(*int32)(unsafe.Pointer(&(_p.X6))) += 1 - crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) - if _iOuter == (_p.X0) { - crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) + _p.XnTest += 1 + crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) + if _iOuter == _p.Xtid { + crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) _run_sql(tls, _p, str(1399)) - crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) + crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) } - _pStmt = _prep_sql(tls, _p.X4, str(1406), _p.X0, _p.X0, _p.X0) + _pStmt = _prep_sql(tls, _p.Xdb, str(1406), _p.Xtid, _p.Xtid, _p.Xtid) _worker_trace(tls, _p, str(1239), unsafe.Pointer(bin.Xsqlite3_sql(tls, _pStmt))) - _i = i32(0) + _i = int32(0) _14: - if _i >= (_p.X1) { + if _i >= _p.XnWorker { goto _17 } _rc = bin.Xsqlite3_step(tls, _pStmt) - if _rc != i32(100) { + if _rc != int32(100) { _worker_error(tls, _p, str(1250), unsafe.Pointer(bin.Xsqlite3_sql(tls, _pStmt))) goto _17 } @@ -411,58 +409,64 @@ _14: goto _14 _17: bin.Xsqlite3_finalize(tls, _pStmt) - if (_p.X5) != 0 { + if _p.XnErr != 0 { goto _3 } - _worker_delete_all_content(tls, _p, ((_p.X0)+_iOuter)%i32(2)) + _worker_delete_all_content(tls, _p, (_p.Xtid+_iOuter)%int32(2)) _worker_close_connection(tls, _p) - *(*unsafe.Pointer)(unsafe.Pointer(&(_p.X4))) = nil + _p.Xdb = nil _iOuter += 1 goto _0 _3: _worker_close_connection(tls, _p) - crt.Xprintf(tls, str(1552), _p.X0) + crt.Xprintf(tls, str(1552), _p.Xtid) crt.Xfflush(tls, (*crt.XFILE)(Xstdout)) return nil } -// Open the database connection for WorkerInfo. The order in which -// the files are opened is a function of the tid value. +// C comment +// /* +// ** Open the database connection for WorkerInfo. The order in which +// ** the files are opened is a function of the tid value. +// */ func _worker_open_connection(tls *crt.TLS, _p *XWorkerInfo, _iCnt int32) { var _x, _rc int32 var _zFile *int8 - _x = ((_p.X0) + _iCnt) % i32(6) - _zFile = bin.Xsqlite3_mprintf(tls, str(1572), int32(*(*uint8)(unsafe.Pointer(uintptr((unsafe.Pointer)((*[3]uint8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_worker_open_connectionØ00aOrderØ001))+3*uintptr(_x))))) + 1*uintptr(i32(0)))))) - _check_oom(tls, (unsafe.Pointer)(_zFile)) + _x = (_p.Xtid + _iCnt) % int32(6) + _zFile = bin.Xsqlite3_mprintf(tls, str(1572), int32(*elem4((*uint8)(unsafe.Pointer(elem5((*[3]uint8)(unsafe.Pointer(&_worker_open_connectionØ00aOrderØ001)), uintptr(_x)))), 0))) + _check_oom(tls, unsafe.Pointer(_zFile)) _worker_trace(tls, _p, str(1586), unsafe.Pointer(_zFile)) - _rc = bin.Xsqlite3_open_v2(tls, _zFile, (**bin.Xsqlite3)(unsafe.Pointer((*unsafe.Pointer)(unsafe.Pointer(&(_p.X4))))), i32(131074), nil) - if _rc != i32(0) { - crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(1594), unsafe.Pointer(_zFile), _p.X0) - crt.Xexit(tls, i32(1)) + _rc = bin.Xsqlite3_open_v2(tls, _zFile, (**bin.Xsqlite3)(unsafe.Pointer(&_p.Xdb)), int32(131074), nil) + if _rc != int32(0) { + crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(1594), unsafe.Pointer(_zFile), _p.Xtid) + crt.Xexit(tls, int32(1)) } - bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zFile)) + bin.Xsqlite3_free(tls, unsafe.Pointer(_zFile)) _run_sql(tls, _p, str(1634)) - bin.Xsqlite3_busy_timeout(tls, (*bin.Xsqlite3)(_p.X4), i32(10000)) + bin.Xsqlite3_busy_timeout(tls, (*bin.Xsqlite3)(_p.Xdb), int32(10000)) _run_sql(tls, _p, str(1662)) - _run_sql(tls, _p, str(1686), int32(*(*uint8)(unsafe.Pointer(uintptr((unsafe.Pointer)((*[3]uint8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_worker_open_connectionØ00aOrderØ001))+3*uintptr(_x))))) + 1*uintptr(i32(1)))))) - _run_sql(tls, _p, str(1717), int32(*(*uint8)(unsafe.Pointer(uintptr((unsafe.Pointer)((*[3]uint8)(unsafe.Pointer(uintptr((unsafe.Pointer)(&_worker_open_connectionØ00aOrderØ001))+3*uintptr(_x))))) + 1*uintptr(i32(2)))))) + _run_sql(tls, _p, str(1686), int32(*elem4((*uint8)(unsafe.Pointer(elem5((*[3]uint8)(unsafe.Pointer(&_worker_open_connectionØ00aOrderØ001)), uintptr(_x)))), uintptr(1)))) + _run_sql(tls, _p, str(1717), int32(*elem4((*uint8)(unsafe.Pointer(elem5((*[3]uint8)(unsafe.Pointer(&_worker_open_connectionØ00aOrderØ001)), uintptr(_x)))), uintptr(2)))) } var _worker_open_connectionØ00aOrderØ001 [6][3]uint8 func init() { - _worker_open_connectionØ00aOrderØ001 = [6][3]uint8{[3]uint8{u8(1), u8(2), u8(3)}, [3]uint8{u8(1), u8(3), u8(2)}, [3]uint8{u8(2), u8(1), u8(3)}, [3]uint8{u8(2), u8(3), u8(1)}, [3]uint8{u8(3), u8(1), u8(2)}, [3]uint8{u8(3), u8(2), u8(1)}} + _worker_open_connectionØ00aOrderØ001 = [6][3]uint8{[3]uint8{uint8(1), uint8(2), uint8(3)}, [3]uint8{uint8(1), uint8(3), uint8(2)}, [3]uint8{uint8(2), uint8(1), uint8(3)}, [3]uint8{uint8(2), uint8(3), uint8(1)}, [3]uint8{uint8(3), uint8(1), uint8(2)}, [3]uint8{uint8(3), uint8(2), uint8(1)}} } -// Create rows mn through mx in table iTab for the given worker +// C comment +// /* +// ** Create rows mn through mx in table iTab for the given worker +// */ func _worker_add_content(tls *crt.TLS, _p *XWorkerInfo, _mn int32, _mx int32, _iTab int32) { var _zTabDef *int8 switch _iTab { - case i32(1): + case int32(1): goto _1 - case i32(2): + case int32(2): goto _2 - case i32(3): + case int32(3): goto _3 default: goto _4 @@ -478,15 +482,18 @@ _3: _zTabDef = str(1782) goto _4 _4: - crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) - _run_sql(tls, _p, str(1799), _mn, _mx, unsafe.Pointer(_zTabDef), _p.X0) - crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) - *(*int32)(unsafe.Pointer(&(_p.X6))) += 1 + crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) + _run_sql(tls, _p, str(1799), _mn, _mx, unsafe.Pointer(_zTabDef), _p.Xtid) + crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) + _p.XnTest += 1 } -// Prepare a single SQL query +// C comment +// /* +// ** Prepare a single SQL query +// */ func _prep_sql(tls *crt.TLS, _db unsafe.Pointer, _zFormat *int8, args ...interface{}) (r0 unsafe.Pointer) { - var _rc int32 + var _rc, _i int32 var _zSql *int8 var _pStmt unsafe.Pointer var _ap []interface{} @@ -494,63 +501,83 @@ func _prep_sql(tls *crt.TLS, _db unsafe.Pointer, _zFormat *int8, args ...interfa _ap = args _zSql = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) _ap = nil - _check_oom(tls, (unsafe.Pointer)(_zSql)) - _rc = bin.Xsqlite3_prepare_v2(tls, (*bin.Xsqlite3)(_db), _zSql, i32(-1), &_pStmt, nil) - if _rc != i32(0) { + _check_oom(tls, unsafe.Pointer(_zSql)) + _i = int32(0) +_0: + if _i >= int32(1000) { + goto _3 + } + _rc = bin.Xsqlite3_prepare_v2(tls, (*bin.Xsqlite3)(_db), _zSql, int32(-1), &_pStmt, nil) + if _rc == int32(0) { + goto _3 + } + _i += 1 + goto _0 +_3: + if _rc != int32(0) { crt.Xfprintf(tls, (*crt.XFILE)(Xstderr), str(991), _rc, bin.Xsqlite3_extended_errcode(tls, (*bin.Xsqlite3)(_db)), unsafe.Pointer(bin.Xsqlite3_errmsg(tls, (*bin.Xsqlite3)(_db))), unsafe.Pointer(_zSql)) - crt.Xexit(tls, i32(1)) + crt.Xexit(tls, int32(1)) } - bin.Xsqlite3_free(tls, (unsafe.Pointer)(_zSql)) + bin.Xsqlite3_free(tls, unsafe.Pointer(_zSql)) return _pStmt } -// Set an error message on a worker +// C comment +// /* +// ** Set an error message on a worker +// */ func _worker_error(tls *crt.TLS, _p *XWorkerInfo, _zFormat *int8, args ...interface{}) { var _ap []interface{} - *(*int32)(unsafe.Pointer(&(_p.X5))) += 1 - bin.Xsqlite3_free(tls, (unsafe.Pointer)(_p.X7)) + _p.XnErr += 1 + bin.Xsqlite3_free(tls, unsafe.Pointer(_p.XzMsg)) _ap = args - *(**int8)(unsafe.Pointer(&(_p.X7))) = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) + _p.XzMsg = bin.Xsqlite3_vmprintf(tls, _zFormat, _ap) _ap = nil } -// Delete all content in the three databases associated with a -// single thread. Make this happen all in a single transaction if -// inTrans is true, or separately for each database if inTrans is -// false. +// C comment +// /* +// ** Delete all content in the three databases associated with a +// ** single thread. Make this happen all in a single transaction if +// ** inTrans is true, or separately for each database if inTrans is +// ** false. +// */ func _worker_delete_all_content(tls *crt.TLS, _p *XWorkerInfo, _inTrans int32) { if _inTrans != 0 { - crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) + crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) _run_sql(tls, _p, str(1947)) - _run_sql(tls, _p, str(1953), _p.X0) - _run_sql(tls, _p, str(1981), _p.X0) - _run_sql(tls, _p, str(2009), _p.X0) + _run_sql(tls, _p, str(1953), _p.Xtid) + _run_sql(tls, _p, str(1981), _p.Xtid) + _run_sql(tls, _p, str(2009), _p.Xtid) _run_sql(tls, _p, str(2037)) - crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) - *(*int32)(unsafe.Pointer(&(_p.X6))) += 1 + crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) + _p.XnTest += 1 goto _1 } - crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) - _run_sql(tls, _p, str(1953), _p.X0) - crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) - *(*int32)(unsafe.Pointer(&(_p.X6))) += 1 - crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) - _run_sql(tls, _p, str(1981), _p.X0) - crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) - *(*int32)(unsafe.Pointer(&(_p.X6))) += 1 - crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) - _run_sql(tls, _p, str(2009), _p.X0) - crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.X9)) - *(*int32)(unsafe.Pointer(&(_p.X6))) += 1 + crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) + _run_sql(tls, _p, str(1953), _p.Xtid) + crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) + _p.XnTest += 1 + crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) + _run_sql(tls, _p, str(1981), _p.Xtid) + crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) + _p.XnTest += 1 + crt.Xpthread_mutex_lock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) + _run_sql(tls, _p, str(2009), _p.Xtid) + crt.Xpthread_mutex_unlock(tls, (*crt.Xpthread_mutex_t)(_p.XpWrMutex)) + _p.XnTest += 1 _1: } -// Close the worker database connection +// C comment +// /* +// ** Close the worker database connection +// */ func _worker_close_connection(tls *crt.TLS, _p *XWorkerInfo) { - if (_p.X4) != nil { + if _p.Xdb != nil { _worker_trace(tls, _p, str(2044)) - bin.Xsqlite3_close(tls, (*bin.Xsqlite3)(_p.X4)) - *(*unsafe.Pointer)(unsafe.Pointer(&(_p.X4))) = nil + bin.Xsqlite3_close(tls, (*bin.Xsqlite3)(_p.Xdb)) + _p.Xdb = nil } } @@ -561,35 +588,40 @@ func bool2int(b bool) int32 { return 0 } func bug20530(interface{}) {} //TODO remove when https://github.com/golang/go/issues/20530 is fixed. -func i16(n int16) int16 { return n } -func i32(n int32) int32 { return n } -func i64(n int64) int64 { return n } -func i8(n int8) int8 { return n } func init() { nzf32 *= -1; nzf64 *= -1 } -func u16(n uint16) uint16 { return n } -func u32(n uint32) uint32 { return n } -func u64(n uint64) uint64 { return n } -func u8(n byte) byte { return n } var inf = math.Inf(1) -var nzf32 float32 // -0.0 -var nzf64 float64 // -0.0 -func sink1(int32) {} //TODO report GC bug -func sink0(uint32) {} //TODO report GC bug -func store1(p *int32, v int32) int32 { *p = v; return v } +var nzf32 float32 // -0.0 +var nzf64 float64 // -0.0 +func elem0(a **int8, index uintptr) **int8 { + return (**int8)(unsafe.Pointer(uintptr(unsafe.Pointer(a)) + 4*index)) +} +func elem5(a *[3]uint8, index uintptr) *[3]uint8 { + return (*[3]uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(a)) + 3*index)) +} +func elem1(a *int8, index uintptr) *int8 { + return (*int8)(unsafe.Pointer(uintptr(unsafe.Pointer(a)) + 1*index)) +} +func elem2(a *XWorkerInfo, index uintptr) *XWorkerInfo { + return (*XWorkerInfo)(unsafe.Pointer(uintptr(unsafe.Pointer(a)) + 40*index)) +} +func elem4(a *uint8, index uintptr) *uint8 { + return (*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(a)) + 1*index)) +} +func store3(p *int32, v int32) int32 { *p = v; return v } type XWorkerInfo struct { - X0 int32 - X1 int32 - X2 uint32 - X3 unsafe.Pointer - X4 unsafe.Pointer - X5 int32 - X6 int32 - X7 *int8 - X8 uint32 - X9 unsafe.Pointer -} // t2 struct{int32,int32,uint32,*struct{},*struct{},int32,int32,*int8,uint32,*struct{}} + Xtid int32 + XnWorker int32 + XwkrFlags uint32 + XmainDb unsafe.Pointer + Xdb unsafe.Pointer + XnErr int32 + XnTest int32 + XzMsg *int8 + Xid uint32 + XpWrMutex unsafe.Pointer +} // t6 struct{tid int32,nWorker int32,wkrFlags uint32,mainDb *struct{},db *struct{},nErr int32,nTest int32,zMsg *int8,id uint32,pWrMutex *struct{}} func str(n int) *int8 { return (*int8)(unsafe.Pointer(&strTab[n])) } func wstr(n int) *int32 { return (*int32)(unsafe.Pointer(&strTab[n])) } |