It's from rev 525 compiled on debian (but buildtag was set to 'ubuntu') with -o0 switch, unstripped binary. POL sometimes crash randomly after few minutes after start, without players online or when i'm trying to wipe area from npcs.
I've tried to switch ai scripts to dummy ones with "return 1;" or empty "while (me) sleep(2 minutes) end" loop. No luck here. What i've found that the same data files run on 32 bit rev 525 compilation under windows are working just fine. I can wipe whole world from npcs and no crash here. But under linux it keeps crashing randomly on 64bit and 32bit binaries. I've tried running pol under debian and slackware 13. Debian was installed on vmware with 4 GB of ram and slackware is old pc box with p4 3,6Ghz HT and 4 GB of ram.
I've already tried to revert scripts to one of my old backups but no luck either. I've noticed that when i delete npcs.txt and npceqip.txt POL works fine. I can also leave npcs alone and delete storage.txt and POL will work w/o crash. But that's not an options as i want to keep my worldstate intact.
Code: Select all
Caught SIGSEGV (Segfault). Please post the following on http://forums.polserver.com/tracker.php :
=== CUT ===
Build: POL099-2011-05-02 Break Everything Even Rudder (ubuntu - 64bit)
Last Script: pkg/mobiles/oldAI/ai/townguard.ecl PC: 467
Stack Backtrace:
[0x699e78]
[0x70fef0]
[0x515ab0]
[0x515b08]
[0x514f60]
[0x513ecb]
[0x535228]
[0x69d6bc]
[0x69d8b6]
[0x70b6ea]
[0x77d8c9]
=== CUT ===
Code: Select all
Reading symbols from /usr/local/Ultima/dmnew/pol...done.
(gdb) l *0x699e78
0x699e78 is in segv_handler(int) (clib/strexcpt.cpp:275).
270 cerr << "Build: " << progverstr << " (" << buildtagstr << ")" << endl;
271 cerr << "Last Script: " << scripts_thread_script << " PC: " << scripts_thread_scriptPC << endl;
272 cerr << "Stack Backtrace:" << endl;
273
274 void* bt[ 200 ];
275 int n = backtrace( bt, 200 );
276 char** strings = backtrace_symbols( bt, n );
277 for (int i = 0; i < n; i++)
278 {
279 Log( "%s\n", strings[ i ] );
(gdb) l *0x70fef0
No source file for address 0x70fef0.
(gdb) l *0x515ab0
0x515ab0 is in std::tr1::__detail::_Hashtable_iterator_base<std::pair<unsigned int const, ref_ptr<UObject> >, false>::_M_incr_bucket() (/usr/include/c++/4.4/tr1_impl/hashtable_policy.h:271).
266 _M_incr_bucket()
267 {
268 ++_M_cur_bucket;
269
270 // This loop requires the bucket array to have a non-null sentinel.
271 while (!*_M_cur_bucket)
272 ++_M_cur_bucket;
273 _M_cur_node = *_M_cur_bucket;
274 }
275
(gdb) l *0x515b08
0x515b08 is in std::tr1::__detail::_Hashtable_iterator_base<std::pair<unsigned int const, ref_ptr<UObject> >, false>::_M_incr() (/usr/include/c++/4.4/tr1_impl/hashtable_policy.h:252).
247 _M_incr()
248 {
249 _M_cur_node = _M_cur_node->_M_next;
250 if (!_M_cur_node)
251 _M_incr_bucket();
252 }
253
254 void
255 _M_incr_bucket();
256
(gdb) l *0x514f60
0x514f60 is in std::tr1::__detail::_Hashtable_iterator<std::pair<unsigned int const, ref_ptr<UObject> >, false, false>::operator++() (/usr/include/c++/4.4/tr1_impl/hashtable_policy.h:327).
322
323 _Hashtable_iterator&
324 operator++()
325 {
326 this->_M_incr();
327 return *this;
328 }
329
330 _Hashtable_iterator
331 operator++(int)
(gdb) l *0x513ecb
0x513ecb is in ObjectHash::Reap() (pol/objecthash.cpp:161).
156 while (count_this--)
157 {
158 OH_iterator save_iterator = reap_iterator;
159 ++reap_iterator;
160
161 UObject* obj = (*save_iterator).second.get();
162
163 // We want the objecthash to be the holder of the last reference to an
164 // object when it is deleted - hence the ref_counted_count() check.
165 if (obj->orphan() && obj->ref_counted_count() == 1)
(gdb) l *0x535228
0x535228 is in reap_thread() (pol/pol.cpp:1595).
1590 {
1591 PolLock lck;
1592 polclock_checkin();
1593 objecthash.Reap();
1594
1595 for_each( dynamic_item_descriptors.begin(), dynamic_item_descriptors.end(), delete_ob<ItemDesc>() );
1596 dynamic_item_descriptors.clear();
1597 }
1598
1599 threadhelp::thread_sleep_ms( 2000 );
(gdb) l *0x69d6bc
0x69d6bc is in threadhelp::run_thread(void (*)()) (clib/threadhelp.cpp:221).
216
217 void run_thread( void (*threadf)(void) )
218 {
219 // thread creator calls inc_child_thread_count before starting thread
220 try {
221 (*threadf)();
222 }
223 catch( std::exception& ex )
224 {
225 cerr << "Thread exception: " << ex.what() <<endl;
(gdb) l *0x69d8b6
0x69d8b6 is in threadhelp::thread_stub2(void*) (clib/threadhelp.cpp:282).
277 run_thread( entry_noparam );
278
279 #ifdef _WIN32
280 _endthreadex(0);
281 #else
282 pthread_exit(NULL);
283 #endif
284 return 0;
285 }
286
(gdb) l *0x70b6ea
0x70b6ea is in start_thread (pthread_create.c:300).
295 pthread_create.c: Nie ma takiego pliku ani katalogu. (no such file or directory)
in pthread_create.c
(gdb) l *0x77d8c9
No source file for address 0x77d8c9.