Closed Bug 533034 Opened 15 years ago Closed 15 years ago

Valgrind: Errors in the IPDL TestShmem

Categories

(Core :: IPC, defect)

x86
Linux
defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: cjones, Assigned: cjones)

References

Details

Attachments

(1 file)

==28884== Use of uninitialised value of size 8
==28884==    at 0x68FECCC: __gnu_cxx::hashtable<std::pair<int const, mozilla::ipc::SharedMemory*>, int, __gnu_cxx::hash<int>, std::_Select1st<std::pair<int const, mozilla::ipc::SharedMemory*> >, std::equal_to<int>, std::allocator<mozilla::ipc::SharedMemory*> >::find(int const&) (hashtable.h:512)
==28884==    by 0x68FED74: __gnu_cxx::hash_map<int, mozilla::ipc::SharedMemory*, __gnu_cxx::hash<int>, std::equal_to<int>, std::allocator<mozilla::ipc::SharedMemory*> >::find(int const&) (hash_map:213)
==28884==    by 0x68FFDB6: IDMap<mozilla::ipc::SharedMemory>::AddWithID(mozilla::ipc::SharedMemory*, int) (id_map.h:58)
==28884==    by 0x68FDC4E: mozilla::_ipdltest::PTestShmemParent::RegisterShmem(mozilla::ipc::SharedMemory*) (PTestShmemParent.cpp:221)
==28884==    by 0x68FDE44: mozilla::_ipdltest::PTestShmemParent::AllocShmem(unsigned long, mozilla::ipc::Shmem*) (PTestShmemParent.cpp:201)
==28884==    by 0x69CD9E1: mozilla::_ipdltest::TestShmemParent::Main() (TestShmem.cpp:17)
==28884==    by 0x69CACA5: mozilla::_ipdltest::IPDLUnitTestMain(void*) (IPDLUnitTests.cpp:295)
==28884==    by 0x578D6A9: (anonymous namespace)::MainFunctionRunnable::Run() (nsEmbedFunctions.cpp:377)
==28884==    by 0x6A49A2F: nsThread::ProcessNextEvent(int, int*) (nsThread.cpp:527)
==28884==    by 0x69DFD89: NS_ProcessNextEvent_P(nsIThread*, int) (nsThreadUtils.cpp:250)
==28884==    by 0x68BCDD5: mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) (MessagePump.cpp:118)
==28884==    by 0x695C40A: MessageLoop::RunInternal() (message_loop.cc:211)
==28884== 
==28884== Use of uninitialised value of size 8
==28884==    at 0x68FFC5E: __gnu_cxx::hashtable<std::pair<int const, mozilla::ipc::SharedMemory*>, int, __gnu_cxx::hash<int>, std::_Select1st<std::pair<int const, mozilla::ipc::SharedMemory*> >, std::equal_to<int>, std::allocator<mozilla::ipc::SharedMemory*> >::find_or_insert(std::pair<int const, mozilla::ipc::SharedMemory*> const&) (hashtable.h:797)
==28884==    by 0x68FFD67: __gnu_cxx::hash_map<int, mozilla::ipc::SharedMemory*, __gnu_cxx::hash<int>, std::equal_to<int>, std::allocator<mozilla::ipc::SharedMemory*> >::operator[](int const&) (hash_map:221)
==28884==    by 0x68FFE2E: IDMap<mozilla::ipc::SharedMemory>::AddWithID(mozilla::ipc::SharedMemory*, int) (id_map.h:59)
==28884==    by 0x68FDC4E: mozilla::_ipdltest::PTestShmemParent::RegisterShmem(mozilla::ipc::SharedMemory*) (PTestShmemParent.cpp:221)
==28884==    by 0x68FDE44: mozilla::_ipdltest::PTestShmemParent::AllocShmem(unsigned long, mozilla::ipc::Shmem*) (PTestShmemParent.cpp:201)
==28884==    by 0x69CD9E1: mozilla::_ipdltest::TestShmemParent::Main() (TestShmem.cpp:17)
==28884==    by 0x69CACA5: mozilla::_ipdltest::IPDLUnitTestMain(void*) (IPDLUnitTests.cpp:295)
==28884==    by 0x578D6A9: (anonymous namespace)::MainFunctionRunnable::Run() (nsEmbedFunctions.cpp:377)
==28884==    by 0x6A49A2F: nsThread::ProcessNextEvent(int, int*) (nsThread.cpp:527)
==28884==    by 0x69DFD89: NS_ProcessNextEvent_P(nsIThread*, int) (nsThreadUtils.cpp:250)
==28884==    by 0x68BCDD5: mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) (MessagePump.cpp:118)
==28884==    by 0x695C40A: MessageLoop::RunInternal() (message_loop.cc:211)
==28884== 
==28884== Use of uninitialised value of size 8
==28884==    at 0x68FFD03: __gnu_cxx::hashtable<std::pair<int const, mozilla::ipc::SharedMemory*>, int, __gnu_cxx::hash<int>, std::_Select1st<std::pair<int const, mozilla::ipc::SharedMemory*> >, std::equal_to<int>, std::allocator<mozilla::ipc::SharedMemory*> >::find_or_insert(std::pair<int const, mozilla::ipc::SharedMemory*> const&) (hashtable.h:805)
==28884==    by 0x68FFD67: __gnu_cxx::hash_map<int, mozilla::ipc::SharedMemory*, __gnu_cxx::hash<int>, std::equal_to<int>, std::allocator<mozilla::ipc::SharedMemory*> >::operator[](int const&) (hash_map:221)
==28884==    by 0x68FFE2E: IDMap<mozilla::ipc::SharedMemory>::AddWithID(mozilla::ipc::SharedMemory*, int) (id_map.h:59)
==28884==    by 0x68FDC4E: mozilla::_ipdltest::PTestShmemParent::RegisterShmem(mozilla::ipc::SharedMemory*) (PTestShmemParent.cpp:221)
==28884==    by 0x68FDE44: mozilla::_ipdltest::PTestShmemParent::AllocShmem(unsigned long, mozilla::ipc::Shmem*) (PTestShmemParent.cpp:201)
==28884==    by 0x69CD9E1: mozilla::_ipdltest::TestShmemParent::Main() (TestShmem.cpp:17)
==28884==    by 0x69CACA5: mozilla::_ipdltest::IPDLUnitTestMain(void*) (IPDLUnitTests.cpp:295)
==28884==    by 0x578D6A9: (anonymous namespace)::MainFunctionRunnable::Run() (nsEmbedFunctions.cpp:377)
==28884==    by 0x6A49A2F: nsThread::ProcessNextEvent(int, int*) (nsThread.cpp:527)
==28884==    by 0x69DFD89: NS_ProcessNextEvent_P(nsIThread*, int) (nsThreadUtils.cpp:250)
==28884==    by 0x68BCDD5: mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) (MessagePump.cpp:118)
==28884==    by 0x695C40A: MessageLoop::RunInternal() (message_loop.cc:211)
==28884== 
==28884== Conditional jump or move depends on uninitialised value(s)
==28884==    at 0x68C18E9: mozilla::ipc::Shmem::Shmem(mozilla::ipc::Shmem::IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead, mozilla::ipc::SharedMemory*, int) (Shmem.cpp:147)
==28884==    by 0x68FDEC5: mozilla::_ipdltest::PTestShmemParent::AllocShmem(unsigned long, mozilla::ipc::Shmem*) (PTestShmemParent.cpp:207)
==28884==    by 0x69CD9E1: mozilla::_ipdltest::TestShmemParent::Main() (TestShmem.cpp:17)
==28884==    by 0x69CACA5: mozilla::_ipdltest::IPDLUnitTestMain(void*) (IPDLUnitTests.cpp:295)
==28884==    by 0x578D6A9: (anonymous namespace)::MainFunctionRunnable::Run() (nsEmbedFunctions.cpp:377)
==28884==    by 0x6A49A2F: nsThread::ProcessNextEvent(int, int*) (nsThread.cpp:527)
==28884==    by 0x69DFD89: NS_ProcessNextEvent_P(nsIThread*, int) (nsThreadUtils.cpp:250)
==28884==    by 0x68BCDD5: mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) (MessagePump.cpp:118)
==28884==    by 0x695C40A: MessageLoop::RunInternal() (message_loop.cc:211)
==28884==    by 0x695C422: MessageLoop::RunHandler() (message_loop.cc:194)
==28884==    by 0x695C483: MessageLoop::Run() (message_loop.cc:168)
==28884==    by 0x68207C8: nsBaseAppShell::Run() (nsBaseAppShell.cpp:174)
==28884== 
==28884== Thread 2:
==28884== Syscall param socketcall.sendmsg(msg.msg_iov[i]) points to uninitialised byte(s)
==28884==    at 0x4E3A54B: (within /lib/libpthread-2.9.so)
==28884==    by 0x69BD5A4: IPC::Channel::ChannelImpl::ProcessOutgoingMessages() (ipc_channel_posix.cc:598)
==28884==    by 0x69BD83E: IPC::Channel::ChannelImpl::Send(IPC::Message*) (ipc_channel_posix.cc:654)
==28884==    by 0x69BD87C: IPC::Channel::Send(IPC::Message*) (ipc_channel_posix.cc:791)
==28884==    by 0x68B84C0: mozilla::ipc::AsyncChannel::OnSend(IPC::Message*) (AsyncChannel.cpp:410)
==28884==    by 0x68B95D6: void DispatchToMethod<mozilla::ipc::AsyncChannel, void (mozilla::ipc::AsyncChannel::*)(IPC::Message*), IPC::Message*>(mozilla::ipc::AsyncChannel*, void (mozilla::ipc::AsyncChannel::*)(IPC::Message*), Tuple1<IPC::Message*> const&) (tuple.h:393)
==28884==    by 0x68B9613: RunnableMethod<mozilla::ipc::AsyncChannel, void (mozilla::ipc::AsyncChannel::*)(IPC::Message*), Tuple1<IPC::Message*> >::Run() (task.h:307)
==28884==    by 0x695B93B: MessageLoop::RunTask(Task*) (message_loop.cc:326)
==28884==    by 0x695BD87: MessageLoop::DeferOrRunPendingTask(MessageLoop::PendingTask const&) (message_loop.cc:334)
==28884==    by 0x695C088: MessageLoop::DoWork() (message_loop.cc:434)
==28884==    by 0x69ADC43: base::MessagePumpLibevent::Run(base::MessagePump::Delegate*) (message_pump_libevent.cc:309)
==28884==    by 0x695C40A: MessageLoop::RunInternal() (message_loop.cc:211)
==28884==  Address 0x11ec3920 is 40 bytes inside a block of size 64 alloc'd
==28884==    at 0x4C278AE: malloc (vg_replace_malloc.c:207)
==28884==    by 0x4C27A37: realloc (vg_replace_malloc.c:429)
==28884==    by 0x6968361: Pickle::Resize(unsigned long) (pickle.cc:423)
==28884==    by 0x696860A: Pickle::Pickle(int) (pickle.cc:38)
==28884==    by 0x6999EEF: IPC::Message::Message(int, unsigned short, IPC::Message::PriorityValue) (ipc_message.cc:31)
==28884==    by 0x6900004: mozilla::ipc::__internal__ipdl__ShmemCreated::__internal__ipdl__ShmemCreated(int, base::FileDescriptor const&, int const&, unsigned long const&) (ProtocolUtils.h:110)
==28884==    by 0x68FDE70: mozilla::_ipdltest::PTestShmemParent::AllocShmem(unsigned long, mozilla::ipc::Shmem*) (PTestShmemParent.cpp:202)
==28884==    by 0x69CD9E1: mozilla::_ipdltest::TestShmemParent::Main() (TestShmem.cpp:17)
==28884==    by 0x69CACA5: mozilla::_ipdltest::IPDLUnitTestMain(void*) (IPDLUnitTests.cpp:295)
==28884==    by 0x578D6A9: (anonymous namespace)::MainFunctionRunnable::Run() (nsEmbedFunctions.cpp:377)
==28884==    by 0x6A49A2F: nsThread::ProcessNextEvent(int, int*) (nsThread.cpp:527)
==28884==    by 0x69DFD89: NS_ProcessNextEvent_P(nsIThread*, int) (nsThreadUtils.cpp:250)
==28884== 
==28884== Thread 1:
==28884== Conditional jump or move depends on uninitialised value(s)
==28884==    at 0x68FEE46: __gnu_cxx::hashtable<std::pair<int const, mozilla::ipc::SharedMemory*>, int, __gnu_cxx::hash<int>, std::_Select1st<std::pair<int const, mozilla::ipc::SharedMemory*> >, std::equal_to<int>, std::allocator<mozilla::ipc::SharedMemory*> >::find(int const&) const (hashtable.h:524)
==28884==    by 0x68FEEA2: __gnu_cxx::hash_map<int, mozilla::ipc::SharedMemory*, __gnu_cxx::hash<int>, std::equal_to<int>, std::allocator<mozilla::ipc::SharedMemory*> >::find(int const&) const (hash_map:217)
==28884==    by 0x68FEEE5: IDMap<mozilla::ipc::SharedMemory>::Lookup(int) const (id_map.h:76)
==28884==    by 0x68FDAB3: mozilla::_ipdltest::PTestShmemParent::LookupShmem(int) (PTestShmemParent.cpp:214)
==28884==    by 0x68FE0B3: mozilla::_ipdltest::PTestShmemParent::OnMessageReceived(IPC::Message const&) (PTestShmemParent.cpp:101)
==28884==    by 0x68B8B2C: mozilla::ipc::AsyncChannel::OnDispatchMessage(IPC::Message const&) (AsyncChannel.cpp:196)
==28884==    by 0x68B9401: void DispatchToMethod<mozilla::ipc::AsyncChannel, void (mozilla::ipc::AsyncChannel::*)(IPC::Message const&), IPC::Message>(mozilla::ipc::AsyncChannel*, void (mozilla::ipc::AsyncChannel::*)(IPC::Message const&), Tuple1<IPC::Message> const&) (tuple.h:393)
==28884==    by 0x68B943D: RunnableMethod<mozilla::ipc::AsyncChannel, void (mozilla::ipc::AsyncChannel::*)(IPC::Message const&), Tuple1<IPC::Message> >::Run() (task.h:307)
==28884==    by 0x695B93B: MessageLoop::RunTask(Task*) (message_loop.cc:326)
==28884==    by 0x695BD87: MessageLoop::DeferOrRunPendingTask(MessageLoop::PendingTask const&) (message_loop.cc:334)
==28884==    by 0x695C088: MessageLoop::DoWork() (message_loop.cc:434)
==28884==    by 0x68BD237: mozilla::ipc::DoWorkRunnable::Run() (MessagePump.cpp:75)


The following leak is known, and a TODO.

==28884== 
==28884== 48 bytes in 1 blocks are definitely lost in loss record 13 of 45
==28884==    at 0x4C2726C: operator new(unsigned long) (vg_replace_malloc.c:230)
==28884==    by 0x68C1512: mozilla::ipc::Shmem::CreateSegment(unsigned long, base::FileDescriptor) (Shmem.cpp:333)
==28884==    by 0x68C180A: mozilla::ipc::Shmem::Alloc(mozilla::ipc::Shmem::IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead, unsigned long, bool) (Shmem.cpp:214)
==28884==    by 0x68FDDAE: mozilla::_ipdltest::PTestShmemParent::AllocShmem(unsigned long, mozilla::ipc::Shmem*) (PTestShmemParent.cpp:193)
==28884==    by 0x69CD9E1: mozilla::_ipdltest::TestShmemParent::Main() (TestShmem.cpp:17)
==28884==    by 0x69CACA5: mozilla::_ipdltest::IPDLUnitTestMain(void*) (IPDLUnitTests.cpp:295)
==28884==    by 0x578D6A9: (anonymous namespace)::MainFunctionRunnable::Run() (nsEmbedFunctions.cpp:377)
==28884==    by 0x6A49A2F: nsThread::ProcessNextEvent(int, int*) (nsThread.cpp:527)
==28884==    by 0x69DFD89: NS_ProcessNextEvent_P(nsIThread*, int) (nsThreadUtils.cpp:250)
==28884==    by 0x68BCDD5: mozilla::ipc::MessagePump::Run(base::MessagePump::Delegate*) (MessagePump.cpp:118)
==28884==    by 0x695C40A: MessageLoop::RunInternal() (message_loop.cc:211)
==28884==    by 0x695C422: MessageLoop::RunHandler() (message_loop.cc:194)
==28884==
This looks like it's due to |mNextShmemId| not being initialized by shmem-enabled C++ classes.  Easy fix.
After fixing the uninit member, I get

==29556== Invalid read of size 8
==29556==    at 0x69BC7D4: IPC::Channel::set_listener(IPC::Channel::Listener*) (ipc_channel_posix.cc:787)
==29556==    by 0x68B852E: mozilla::ipc::AsyncChannel::Clear() (AsyncChannel.cpp:292)
==29556==    by 0x68B859C: mozilla::ipc::AsyncChannel::NotifyChannelClosed() (AsyncChannel.cpp:262)
==29556==    by 0x68B8A85: mozilla::ipc::AsyncChannel::Close() (AsyncChannel.cpp:156)
==29556==    by 0x68FDEEA: mozilla::_ipdltest::PTestShmemParent::Close() (PTestShmemParent.cpp:58)
==29556==    by 0x69CD6A7: mozilla::_ipdltest::TestShmemParent::RecvTake(mozilla::ipc::Shmem&, unsigned long const&) (TestShmem.cpp:47)
==29556==    by 0x68FDCE0: mozilla::_ipdltest::PTestShmemParent::OnMessageReceived(IPC::Message const&) (PTestShmemParent.cpp:111)
==29556==    by 0x68B87C0: mozilla::ipc::AsyncChannel::OnDispatchMessage(IPC::Message const&) (AsyncChannel.cpp:196)
==29556==    by 0x68B9095: void DispatchToMethod<mozilla::ipc::AsyncChannel, void (mozilla::ipc::AsyncChannel::*)(IPC::Message const&), IPC::Message>(mozilla::ipc::AsyncChannel*, void (mozilla::ipc::AsyncChannel::*)(IPC::Message const&), Tuple1<IPC::Message> const&) (tuple.h:393)
==29556==    by 0x68B90D1: RunnableMethod<mozilla::ipc::AsyncChannel, void (mozilla::ipc::AsyncChannel::*)(IPC::Message const&), Tuple1<IPC::Message> >::Run() (task.h:307)
==29556==    by 0x695B447: MessageLoop::RunTask(Task*) (message_loop.cc:326)
==29556==    by 0x695B893: MessageLoop::DeferOrRunPendingTask(MessageLoop::PendingTask const&) (message_loop.cc:334)
==29556==  Address 0x118a1518 is 8 bytes inside a block of size 16 free'd
==29556==    at 0x4C260AD: operator delete(void*) (vg_replace_malloc.c:342)
==29556==    by 0x69BC845: IPC::Channel::~Channel() (ipc_channel_posix.cc:776)
==29556==    by 0x698F89F: scoped_ptr<IPC::Channel>::~scoped_ptr() (scoped_ptr.h:72)
==29556==    by 0x698F35F: ChildProcessHost::~ChildProcessHost() (child_process_host.cc:85)
==29556==    by 0x68BA691: mozilla::ipc::GeckoChildProcessHost::~GeckoChildProcessHost() (GeckoChildProcessHost.cpp:85)
==29556==    by 0x69CB50D: mozilla::_ipdltest::IPDLUnitTestSubprocess::~IPDLUnitTestSubprocess() (IPDLUnitTestSubprocess.cpp:53)
==29556==    by 0x69CA377: (anonymous namespace)::DeleteSubprocess(MessageLoop*) (IPDLUnitTests.cpp:219)
==29556==    by 0x69CAFC4: void DispatchToFunction<void (*)(MessageLoop*), MessageLoop*>(void (*)(MessageLoop*), Tuple1<MessageLoop*> const&) (tuple.h:449)
==29556==    by 0x69CAFF5: RunnableFunction<void (*)(MessageLoop*), Tuple1<MessageLoop*> >::Run() (task.h:415)
==29556==    by 0x695B447: MessageLoop::RunTask(Task*) (message_loop.cc:326)
==29556==    by 0x695B893: MessageLoop::DeferOrRunPendingTask(MessageLoop::PendingTask const&) (message_loop.cc:334)
==29556==    by 0x695BB94: MessageLoop::DoWork() (message_loop.cc:434)
==29556== 
==29556== Invalid write of size 8
==29556==    at 0x69BF3A6: IPC::Channel::ChannelImpl::set_listener(IPC::Channel::Listener*) (ipc_channel_posix.h:30)
==29556==    by 0x69BC7E0: IPC::Channel::set_listener(IPC::Channel::Listener*) (ipc_channel_posix.cc:787)
==29556==    by 0x68B852E: mozilla::ipc::AsyncChannel::Clear() (AsyncChannel.cpp:292)
==29556==    by 0x68B859C: mozilla::ipc::AsyncChannel::NotifyChannelClosed() (AsyncChannel.cpp:262)
==29556==    by 0x68B8A85: mozilla::ipc::AsyncChannel::Close() (AsyncChannel.cpp:156)
==29556==    by 0x68FDEEA: mozilla::_ipdltest::PTestShmemParent::Close() (PTestShmemParent.cpp:58)
==29556==    by 0x69CD6A7: mozilla::_ipdltest::TestShmemParent::RecvTake(mozilla::ipc::Shmem&, unsigned long const&) (TestShmem.cpp:47)
==29556==    by 0x68FDCE0: mozilla::_ipdltest::PTestShmemParent::OnMessageReceived(IPC::Message const&) (PTestShmemParent.cpp:111)
==29556==    by 0x68B87C0: mozilla::ipc::AsyncChannel::OnDispatchMessage(IPC::Message const&) (AsyncChannel.cpp:196)
==29556==    by 0x68B9095: void DispatchToMethod<mozilla::ipc::AsyncChannel, void (mozilla::ipc::AsyncChannel::*)(IPC::Message const&), IPC::Message>(mozilla::ipc::AsyncChannel*, void (mozilla::ipc::AsyncChannel::*)(IPC::Message const&), Tuple1<IPC::Message> const&) (tuple.h:393)
==29556==    by 0x68B90D1: RunnableMethod<mozilla::ipc::AsyncChannel, void (mozilla::ipc::AsyncChannel::*)(IPC::Message const&), Tuple1<IPC::Message> >::Run() (task.h:307)
==29556==    by 0x695B447: MessageLoop::RunTask(Task*) (message_loop.cc:326)
==29556==  Address 0x11eba098 is 104 bytes inside a block of size 6,416 free'd
==29556==    at 0x4C260AD: operator delete(void*) (vg_replace_malloc.c:342)
==29556==    by 0x69C07AA: IPC::Channel::ChannelImpl::~ChannelImpl() (ipc_channel_posix.h:27)
==29556==    by 0x69BC82A: IPC::Channel::~Channel() (ipc_channel_posix.cc:775)
==29556==    by 0x698F89F: scoped_ptr<IPC::Channel>::~scoped_ptr() (scoped_ptr.h:72)
==29556==    by 0x698F35F: ChildProcessHost::~ChildProcessHost() (child_process_host.cc:85)
==29556==    by 0x68BA691: mozilla::ipc::GeckoChildProcessHost::~GeckoChildProcessHost() (GeckoChildProcessHost.cpp:85)
==29556==    by 0x69CB50D: mozilla::_ipdltest::IPDLUnitTestSubprocess::~IPDLUnitTestSubprocess() (IPDLUnitTestSubprocess.cpp:53)
==29556==    by 0x69CA377: (anonymous namespace)::DeleteSubprocess(MessageLoop*) (IPDLUnitTests.cpp:219)
==29556==    by 0x69CAFC4: void DispatchToFunction<void (*)(MessageLoop*), MessageLoop*>(void (*)(MessageLoop*), Tuple1<MessageLoop*> const&) (tuple.h:449)
==29556==    by 0x69CAFF5: RunnableFunction<void (*)(MessageLoop*), Tuple1<MessageLoop*> >::Run() (task.h:415)
==29556==    by 0x695B447: MessageLoop::RunTask(Task*) (message_loop.cc:326)
==29556==    by 0x695B893: MessageLoop::DeferOrRunPendingTask(MessageLoop::PendingTask const&) (message_loop.cc:334)

which is disquieting.
Pretty trivial, no r?.
Assignee: nobody → jones.chris.g
Pushed http://hg.mozilla.org/projects/electrolysis/rev/c77da7450ba1
Status: NEW → RESOLVED
Closed: 15 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: