Commit d8b85095 authored by Pavel Vainerman's avatar Pavel Vainerman

(PGSQL): fix SIGSEGV in flushInsertBuffer()

parent 217d9a34
......@@ -212,12 +212,9 @@ void DBServer_PostgreSQL::flushBuffer()
//--------------------------------------------------------------------------------------------
void DBServer_PostgreSQL::flushInsertBuffer()
{
if( !db || !connect_ok )
if( ibufSize > ibufMaxSize )
{
if( ibufSize < ibufMaxSize )
return;
dbcrit << myname << "(flushWriteBuffer): DB not connected!"
dbcrit << myname << "(flushWriteBuffer): "
<< " buffer[" << ibufSize << "] overflow! LOST DATA..." << endl;
// Чистим заданное число
......@@ -228,26 +225,29 @@ void DBServer_PostgreSQL::flushInsertBuffer()
// Удаляем последние (новые)
if( lastRemove )
{
std::advance(beg, -delnum);
end = std::prev(end, delnum);
}
else
{
// Удаляем первые (старые)
std::advance(end, delnum);
beg = std::next(beg, delnum);
}
ibuf.erase(beg, end);
if( beg != ibuf.end() )
ibuf.erase(beg, end);
// ibufSize - беззнаковое, так что надо аккуратно
ibufSize = (delnum < ibufSize) ? (ibufSize - delnum) : 0;
dbwarn << myname << "(flushInsertBuffer): overflow: clear data " << delnum << " records." << endl;
return;
}
if( ibufSize == 0 )
return;
if( !db || !connect_ok )
return;
dbinfo << myname << "(flushInsertBuffer): write insert buffer[" << ibufSize << "] to DB.." << endl;
if( !writeInsertBufferToDB("main_history", tblcols, ibuf) )
......
......@@ -3,5 +3,5 @@
ulimit -Sc 1000000
uniset2-start.sh -f ./uniset2-pgsql-dbserver --confile test.xml --name DBServer1 \
--pgsql-dbserver-buffer-size 100 \
--pgsql-buffer-size 100 \
--pgsql-log-add-levels any $*
......@@ -1815,7 +1815,7 @@ namespace uniset
i++;
}
std::advance(it, sub);
std::next(it, sub);
regID += sub;
}
else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment