• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

TFS 0.X [OTX 2] Container Bug - Crash (GDB Log)

potinho

Advanced OT User
Joined
Oct 11, 2009
Messages
1,403
Solutions
17
Reaction score
151
Location
Brazil
Some player is kicking out my server, i believe some bug related with a lot of containers, someone can help? follow gdb

C++:
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
        set = {__val = {0, 0, 4602678819172646912, 0, 13716376884794897337, 0, 4341932892451373056, 0, 4412963585358036992, 0, 0, 0, 0, 0, 6876827780418335343,
            8245937412990725737}}
        pid = <optimized out>
        tid = <optimized out>
        ret = <optimized out>
#1  0x00007f62697bb921 in __GI_abort () at abort.c:79
        save_stage = 1
        act = {__sigaction_handler = {sa_handler = 0x7f6269b67680 <_IO_2_1_stderr_>, sa_sigaction = 0x7f6269b67680 <_IO_2_1_stderr_>}, sa_mask = {__val = {
              140060653544077, 17, 140060657088128, 3432, 1, 140060657088259, 140060653551649, 11, 140060657088128, 10, 140058549655568, 0, 94352247898256,
              140729211427024, 140060653552851, 140060657088128}}, sa_flags = 1780170112, sa_restorer = 0x55d017ba1091}
        sigs = {__val = {32, 0 <repeats 15 times>}}
        __cnt = <optimized out>
        __set = <optimized out>
        __cnt = <optimized out>
        __set = <optimized out>
#2  0x00007f626a1ae957 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
No symbol table info available.
#3  0x00007f626a1b4ae6 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
No symbol table info available.
#4  0x00007f626a1b4b21 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
No symbol table info available.
#5  0x00007f626a1b4d54 in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
No symbol table info available.
#6  0x000055d0178ff4ae in boost::throw_exception<boost::bad_weak_ptr> (e=...) at /usr/include/boost/throw_exception.hpp:69
No locals.
#7  0x000055d0178f9e22 in boost::detail::shared_count::shared_count (this=0x7f6264d9b878, r=...) at /usr/include/boost/smart_ptr/detail/shared_count.hpp:640
No locals.
#8  0x000055d017b3f653 in boost::shared_ptr<ServicePort>::shared_ptr<ServicePort> (this=0x7f6264d9b870, r=...) at /usr/include/boost/smart_ptr/shared_ptr.hpp:429
No locals.
#9  0x000055d017b3d675 in boost::enable_shared_from_this<ServicePort>::shared_from_this (this=0x7f625a8fa6d8)
    at /usr/include/boost/smart_ptr/enable_shared_from_this.hpp:50
        __PRETTY_FUNCTION__ = "boost::shared_ptr<X> boost::enable_shared_from_this<T>::shared_from_this() [with T = ServicePort]"
        p = {px = 0x7f6264d9bbd8, pn = {pi_ = 0x7f625a8f8fd0}}
#10 0x000055d017b3912a in ServicePort::handle (this=0x7f625a8fa6d0, acceptor=..., socket=0x7f61ec2bf140, error=...) at server.cpp:168
        error = {m_val = 0, m_cat = 0x7f626b43d100}
        ip = {impl_ = {data_ = {base = {sa_family = 2, sa_data = "\307.\277`\341\320\000\000\000\000\000\000\000"}, v4 = {sin_family = 2, sin_port = 11975,
                sin_addr = {s_addr = 3504431295}, sin_zero = "\000\000\000\000\000\000\000"}, v6 = {sin6_family = 2, sin6_port = 11975, sin6_flowinfo = 3504431295,
                sin6_addr = {__in6_u = {__u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}},
                sin6_scope_id = 0}}}}
        remoteIp = 3504431295
        connection = {px = 0x0, pn = {pi_ = 0x0}}
#11 0x000055d017b46914 in boost::_mfi::mf3<void, ServicePort, boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_se---Type <return> to continue, or q <return> to quit---bt full
rvice<boost::asio::ip::tcp> > >, boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*, boost::system::error_code const&>::operator() (this=0x7f6264d9bbb0, p=0x7f625a8fa6d0, a1=..., a2=0x7f61ec2bf140, a3=...) at /usr/include/boost/bind/mem_fn_template.hpp:393
No locals.
#12 0x000055d017b46699 in boost::_bi::list4<boost::_bi::value<ServicePort*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > > >, boost::_bi::value<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*>, boost::arg<1> (*)()>::operator()<boost::_mfi::mf3<void, ServicePort, boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > >, boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*, boost::system::error_code const&>, boost::_bi::rrlist1<boost::system::error_code const&> > (this=0x7f6264d9bbc0, f=..., a=...)
    at /usr/include/boost/bind/bind.hpp:463
No locals.
#13 0x000055d017b46403 in boost::_bi::bind_t<void, boost::_mfi::mf3<void, ServicePort, boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > >, boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*, boost::system::error_code const&>, boost::_bi::list4<boost::_bi::value<ServicePort*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > > >, boost::_bi::value<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*>, boost::arg<1> (*)()> >::operator()<boost::system::error_code const&> (this=0x7f6264d9bbb0, a1=...)
    at /usr/include/boost/bind/bind.hpp:1306
        a = {a1_ = @0x7f6264d9bbe0}
#14 0x000055d017b46226 in boost::asio::detail::binder1<boost::_bi::bind_t<void, boost::_mfi::mf3<void, ServicePort, boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > >, boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*, boost::system::error_code const&>, boost::_bi::list4<boost::_bi::value<ServicePort*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > > >, boost::_bi::value<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*>, boost::arg<1> (*)()> >, boost::system::error_code>::operator() (this=0x7f6264d9bbb0)
    at /usr/include/boost/asio/detail/bind_handler.hpp:47
No locals.
#15 0x000055d017b45e5a in boost::asio::asio_handler_invoke<boost::asio::detail::binder1<boost::_bi::bind_t<void, boost::_mfi::mf3<void, ServicePort, boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > >, boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*, boost::system::error_code const&>, boost::_bi::list4<boost::_bi::value<ServicePort*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > > >, boost::_bi::value<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*>, boost::arg<1> (*)()> >, boost::system::error_code> > (
    function=...) at /usr/include/boost/asio/handler_invoke_hook.hpp:69
No locals.
#16 0x000055d017b4527e in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder1<boost::_bi::bind_t<void, boost::_mfi::mf3<void, ServicePort, boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > >, boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*, boost::system::error_code const&>, boost::_bi::list4<boost::_bi::value<ServicePort*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > > >, boost::_bi::value<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*>, boost::arg<1> (*)()> >, boost::system::error_code>, boost::_bi::bind_t<void, boost::_mfi::mf3<void, ServicePort, boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > >, boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*, boost::system::error_code const&>, boost::_bi::list4<boost::_bi::value<ServicePort*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > > >, boost::_bi::value<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*>, boost::arg<1> (*)()> > > (function=..., context=...) at /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:37
No locals.
#17 0x000055d017b44396 in boost::asio::detail::reactive_socket_accept_op<boost::asio::basic_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio:---Type <return> to continue, or q <return> to quit---bt full
:ip::tcp> >, boost::asio::ip::tcp, boost::_bi::bind_t<void, boost::_mfi::mf3<void, ServicePort, boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > >, boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*, boost::system::error_code const&>, boost::_bi::list4<boost::_bi::value<ServicePort*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > > >, boost::_bi::value<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*>, boost::arg<1> (*)()> > >::do_complete (owner=0x55d018383900, base=0x7f61ec2dbd30)
    at /usr/include/boost/asio/detail/reactive_socket_accept_op.hpp:123
        b = {<boost::asio::detail::noncopyable> = {<No data fields>}, <No data fields>}
        o = 0x7f61ec2dbd30
        p = {h = 0x7f6264d9bbb0, v = 0x0, p = 0x0}
        handler = {handler_ = {f_ = {f_ = (void (ServicePort::*)(ServicePort * const,
    boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > >,
    boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > *,
    const boost::system::error_code &)) 0x55d017b38fdc <ServicePort::handle(boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > >, boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*, boost::system::error_code const&)>},
            l_ = {<boost::_bi::storage4<boost::_bi::value<ServicePort*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > > >, boost::_bi::value<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*>, boost::arg<1> (*)()>> = {<boost::_bi::storage3<boost::_bi::value<ServicePort*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > > >, boost::_bi::value<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >*> >> = {<boost::_bi::storage2<boost::_bi::value<ServicePort*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_socket_acceptor<boost::asio::ip::tcp, boost::asio::socket_acceptor_service<boost::asio::ip::tcp> > > > >> = {<boost::_bi::storage1<boost::_bi::value<ServicePort*> >> = {a1_ = {t_ = 0x7f625a8fa6d0}}, a2_ = {t_ = {px = 0x7f625a8fa440, pn = {pi_ = 0x7f625a8f89b0}}}}, a3_ = {
                    t_ = 0x7f61ec2bf140}}, <No data fields>}, <No data fields>}}, arg1_ = {m_val = 0, m_cat = 0x7f626b43d100}}
#18 0x000055d017b3a4ef in boost::asio::detail::task_io_service_operation::complete (this=0x7f61ec2dbd30, owner=..., ec=..., bytes_transferred=0)
    at /usr/include/boost/asio/detail/task_io_service_operation.hpp:38
No locals.
#19 0x000055d017b3ae6b in boost::asio::detail::epoll_reactor::descriptor_state::do_complete (owner=0x55d018383900, base=0x7f623180a960, ec=..., bytes_transferred=1)
    at /usr/include/boost/asio/detail/impl/epoll_reactor.ipp:704
        op = 0x7f61ec2dbd30
        descriptor_data = 0x7f623180a960
        events = 1
#20 0x000055d017b3a4ef in boost::asio::detail::task_io_service_operation::complete (this=0x7f623180a960, owner=..., ec=..., bytes_transferred=1)
    at /usr/include/boost/asio/detail/task_io_service_operation.hpp:38
No locals.
#21 0x000055d017b3b471 in boost::asio::detail::task_io_service::do_run_one (this=0x55d018383900, lock=..., this_thread=..., ec=...)
    at /usr/include/boost/asio/detail/impl/task_io_service.ipp:372
        task_result = 1
        on_exit = {task_io_service_ = 0x55d018383900, lock_ = 0x7f6264d9bd50, this_thread_ = 0x7f6264d9bd80}
        o = 0x7f623180a960
        more_handlers = true
#22 0x000055d017b3b14d in boost::asio::detail::task_io_service::run (this=0x55d018383900, ec=...) at /usr/include/boost/asio/detail/impl/task_io_service.ipp:149
        this_thread = {<boost::asio::detail::thread_info_base> = {<boost::asio::detail::noncopyable> = {<No data fields>}, reusable_memory_ = 0x7f61ec2ec2b0},
          private_op_queue = {<boost::asio::detail::noncopyable> = {<No data fields>}, front_ = 0x0, back_ = 0x0}, private_outstanding_work = 0}
---Type <return> to continue, or q <return> to quit---bt full
        ctx = {<boost::asio::detail::noncopyable> = {<No data fields>}, key_ = 0x55d018383900, value_ = 0x7f6264d9bd80, next_ = 0x0}
        lock = {<boost::asio::detail::noncopyable> = {<No data fields>}, mutex_ = @0x55d018383930, locked_ = false}
        n = 52618135
#23 0x000055d017b3b5d3 in boost::asio::io_service::run (this=0x7ffe12a81ba8) at /usr/include/boost/asio/impl/io_service.ipp:59
        ec = {m_val = 0, m_cat = 0x7f626b43d100}
        s = 0
#24 0x000055d017b46eca in boost::_mfi::mf0<unsigned long, boost::asio::io_service>::operator() (this=0x55d018384248, p=0x7ffe12a81ba8)
    at /usr/include/boost/bind/mem_fn_template.hpp:49
No locals.
#25 0x000055d017b46e30 in boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> >::operator()<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list0> (this=0x55d018384258, f=..., a=...) at /usr/include/boost/bind/bind.hpp:249
No locals.
#26 0x000055d017b46dc0 in boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > >::operator() (this=0x55d018384248) at /usr/include/boost/bind/bind.hpp:1294
        a = {<No data fields>}
#27 0x000055d017b46ce2 in boost::detail::thread_data<boost::_bi::bind_t<unsigned long, boost::_mfi::mf0<unsigned long, boost::asio::io_service>, boost::_bi::list1<boost::_bi::value<boost::asio::io_service*> > > >::run (this=0x55d018384090) at /usr/include/boost/thread/detail/thread.hpp:116
No locals.
#28 0x00007f626ad1dbcd in ?? () from /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.65.1
No symbol table info available.
#29 0x00007f626aaf46db in start_thread (arg=0x7f6264d9c700) at pthread_create.c:463
        pd = 0x7f6264d9c700
        now = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140060575516416, -1526904269925907642, 140060575514560, 0, 94352247898256, 140729211427024, 1444407652649665350,
                1444404195423552326}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
#30 0x00007f626989c71f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Post automatically merged:

C++:
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 51      ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. [Current thread is 1 (Thread 0x7f6264d9c700 (LWP 6606))] (gdb) br full Breakpoint 1 at 0x55d017912c12: file container.h, line 77. (gdb) bt full #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51        set = {__val = {0, 0, 4602678819172646912, 0, 13716376884794897337, 0,            4341932892451373056, 0, 4412963585358036992, 0, 0, 0, 0, 0,            6876827780418335343, 8245937412990725737}}        pid = <optimized out>        tid = <optimized out>        ret = <optimized out> #1  0x00007f62697bb921 in __GI_abort () at abort.c:79        save_stage = 1        act = {__sigaction_handler = {            sa_handler = 0x7f6269b67680 <_IO_2_1_stderr_>,            sa_sigaction = 0x7f6269b67680 <_IO_2_1_stderr_>}, sa_mask = {            __val = {140060653544077, 17, 140060657088128, 3432, 1,              140060657088259, 140060653551649, 11, 140060657088128, 10,              140058549655568, 0, 94352247898256, 140729211427024,              140060653552851, 140060657088128}}, sa_flags = 1780170112,          sa_restorer = 0x55d017ba1091}        sigs = {__val = {32, 0 <repeats 15 times>}}        __cnt = <optimized out>        __set = <optimized out>        __cnt = <optimized out>        __set = <optimized out>
Post automatically merged:

C++:
////////////////////////////////////////////////////////////////////////
// OpenTibia - an opensource roleplaying game
////////////////////////////////////////////////////////////////////////
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
////////////////////////////////////////////////////////////////////////

#ifndef __CONTAINER__
#define __CONTAINER__
#include "otsystem.h"

#include "cylinder.h"
#include "item.h"

class Depot;
class Container;

class ContainerIterator
{
    public:
        ContainerIterator();
        ContainerIterator(const ContainerIterator& rhs);
        virtual ~ContainerIterator() {}

        ContainerIterator& operator=(const ContainerIterator& rhs);
        bool operator==(const ContainerIterator& rhs);
        bool operator!=(const ContainerIterator& rhs);

        ContainerIterator& operator++();
        ContainerIterator operator++(int32_t);

        Item* operator*();
        Item* operator->();

    protected:
        ContainerIterator(Container* _base);

        Container* base;
        std::queue<Container*> over;
        ItemList::iterator current;

        friend class Container;
};

class Container : public Item, public Cylinder
{
    public:
        Container(uint16_t type);
        virtual ~Container();
        virtual Item* clone() const;

        virtual Container* getContainer() {return this;}
        virtual const Container* getContainer() const {return this;}

        virtual Depot* getDepot() {return NULL;}
        virtual const Depot* getDepot() const {return NULL;}

        Attr_ReadValue readAttr(AttrTypes_t attr, PropStream& propStream);
        bool unserializeItemNode(FileLoader& f, NODE node, PropStream& propStream);

        std::string getContentDescription() const;
        virtual uint32_t getItemHoldingCount() const;
        virtual double getWeight() const;

        uint32_t capacity() const {return maxSize ? maxSize : std::min(255U, (uint32_t)itemlist.size() + 1);}
        uint32_t size() const {return (uint32_t)itemlist.size();}
        bool full() const
        {
            if(maxSize)
                return itemlist.size() >= maxSize;

            return true;
        }
        bool empty() const {return itemlist.empty();}

        void addItem(Item* item);
        Item* getItem(uint32_t index);
        bool isHoldingItem(const Item* item) const;

        ContainerIterator begin();
        ContainerIterator end();

        ContainerIterator begin() const;
        ContainerIterator end() const;

        ItemList::const_iterator getItems() const {return itemlist.begin();}
        ItemList::const_iterator getEnd() const {return itemlist.end();}

        ItemList::const_reverse_iterator getReversedItems() const {return itemlist.rbegin();}
        ItemList::const_reverse_iterator getReversedEnd() const {return itemlist.rend();}

        //cylinder implementations
        virtual Cylinder* getParent() {return Thing::getParent();}
        virtual const Cylinder* getParent() const {return Thing::getParent();}
        virtual bool isRemoved() const {return Thing::isRemoved();}
        virtual Position getPosition() const {return Thing::getPosition();}
        virtual Tile* getTile() {return Thing::getTile();}
        virtual const Tile* getTile() const {return Thing::getTile();}
        virtual Item* getItem() {return this;}
        virtual const Item* getItem() const {return this;}
        virtual Creature* getCreature() {return NULL;}
        virtual const Creature* getCreature() const {return NULL;}

        virtual ReturnValue __queryAdd(int32_t index, const Thing* thing, uint32_t count,
            uint32_t flags, Creature* actor = NULL) const;
        virtual ReturnValue __queryMaxCount(int32_t index, const Thing* thing, uint32_t count, uint32_t& maxQueryCount,
            uint32_t flags) const;
        virtual ReturnValue __queryRemove(const Thing* thing, uint32_t count, uint32_t flags, Creature* actor = NULL) const;
        virtual Cylinder* __queryDestination(int32_t& index, const Thing* thing, Item** destItem,
            uint32_t& flags);

        virtual void __addThing(Creature* actor, Thing* thing);
        virtual void __addThing(Creature* actor, int32_t index, Thing* thing);

        virtual void __updateThing(Thing* thing, uint16_t itemId, uint32_t count);
        virtual void __replaceThing(uint32_t index, Thing* thing);

        virtual void __removeThing(Thing* thing, uint32_t count);

        virtual int32_t __getIndexOfThing(const Thing* thing) const;
        virtual Thing* __getThing(uint32_t index) const;

        virtual int32_t __getFirstIndex() const;
        virtual int32_t __getLastIndex() const;

        virtual uint32_t __getItemTypeCount(uint16_t itemId, int32_t subType = -1,
            bool itemCount = true) const;
        virtual std::map<uint32_t, uint32_t>& __getAllItemTypeCount(std::map<uint32_t,
            uint32_t>& countMap, bool itemCount = true) const;

        virtual void postAddNotification(Creature* actor, Thing* thing, const Cylinder* oldParent,
            int32_t index, CylinderLink_t link = LINK_OWNER);
        virtual void postRemoveNotification(Creature* actor, Thing* thing, const Cylinder* newParent,
            int32_t index, bool isCompleteRemoval, CylinderLink_t link = LINK_OWNER);

        virtual void __internalAddThing(Thing* thing);
        virtual void __internalAddThing(uint32_t index, Thing* thing);
        virtual void __startDecaying();

    private:
        void onAddContainerItem(Item* item);
        void onUpdateContainerItem(uint32_t index, Item* oldItem, const ItemType& oldType,
            Item* newItem, const ItemType& newType);
        void onRemoveContainerItem(uint32_t index, Item* item);

        Container* getParentContainer();
        void updateItemWeight(double diff);
        std::stringstream& getContentDescription(std::stringstream& s) const;

    protected:
        uint32_t maxSize, serializationCount;
        double totalWeight;

        ItemList itemlist;
        friend class ContainerIterator;
        friend class IOMapSerialize;
};
#endif
 
It looks like someone connected from IP 191.96.225.208 (its dedicated server or VPS in tynahost.com - datacenter in Brazil) and it made server crash.
Probably server ran out of RAM or someone somehow made packet that crash server.

Potinho showed me his server.cpp on Discord. I compared it with current OTX2 and it looks like current OTX2 has totally rewritten connection handling.
 
Back
Top