#At file:///home/jonas/src/telco-6.2/
2846 Jonas Oreland 2009-02-19
ndb - bug#34102 - lgman crashed if using more that 150M undo-buffer-memory, increase
limit to 600M and don't crash
modified:
storage/ndb/src/kernel/blocks/lgman.cpp
storage/ndb/src/kernel/vm/DataBuffer.hpp
=== modified file 'storage/ndb/src/kernel/blocks/lgman.cpp'
--- a/storage/ndb/src/kernel/blocks/lgman.cpp 2008-12-20 19:48:44 +0000
+++ b/storage/ndb/src/kernel/blocks/lgman.cpp 2009-02-19 10:01:01 +0000
@@ -120,7 +120,8 @@ Lgman::execREAD_CONFIG_REQ(Signal* signa
m_log_waiter_pool.wo_pool_init(RT_LGMAN_LOG_WAITER, pc);
m_file_pool.init(RT_LGMAN_FILE, pc);
m_logfile_group_pool.init(RT_LGMAN_FILEGROUP, pc);
- m_data_buffer_pool.setSize(10);
+ // 10 -> 150M
+ m_data_buffer_pool.setSize(40);
ReadConfigConf * conf = (ReadConfigConf*)signal->getDataPtrSend();
conf->senderRef = reference();
@@ -924,8 +925,18 @@ Lgman::alloc_logbuffer_memory(Ptr<Logfil
Buffer_idx range;
range.m_ptr_i= ptrI;
range.m_idx = cnt;
-
- ndbrequire(map.append((Uint32*)&range, 2));
+
+ if (map.append((Uint32*)&range, 2) == false)
+ {
+ /**
+ * Failed to append page-range...
+ * jump out of alloc routine
+ */
+ jam();
+ m_ctx.m_mm.release_pages(RG_DISK_OPERATIONS,
+ range.m_ptr_i, range.m_idx);
+ break;
+ }
pages -= range.m_idx;
}
else
=== modified file 'storage/ndb/src/kernel/vm/DataBuffer.hpp'
--- a/storage/ndb/src/kernel/vm/DataBuffer.hpp 2006-12-23 19:20:40 +0000
+++ b/storage/ndb/src/kernel/vm/DataBuffer.hpp 2009-02-19 10:01:01 +0000
@@ -325,7 +325,6 @@ DataBuffer<sz>::seize(Uint32 n){
*/
Uint32 free = thePool.getNoOfFree() * sz + rest;
if(n > free){
- release();
return false;
}
| Thread |
|---|
| • bzr commit into mysql-5.1-telco-6.2 branch (jonas:2846) Bug#34102 | Jonas Oreland | 19 Feb 2009 |