The easiest way to reproduce it is fbtest
{
'id': 'bug',
'qmid': None,
'title': 'Deleting a shadow',
'description': '',
'min_versions': '2.6',
'versions': [
{
'firebird_version': '3.0',
'platform': 'All',
'page_size': '4096',
'test_type': 'python',
'test_script': '''
import os
Shadow1Path = os.path.join(context['temp_directory'], 'DDL_Shadow.shd')
script="""
CREATE SHADOW 1 MANUAL '%s';
commit;
DROP SHADOW 1;
""" %(Shadow1Path)
runProgram('isql', [dsn, '-user', user_name, '-password', user_password, '-q'], script)
''',
'expected_stdout': """
""",
'expected_stderr': """
"""
}
]
}
The stack:
Jrd::Attachment::createPool(Jrd::Attachment * const this) (src\jrd\Attachment.cpp:150)
CMP_compile(Jrd::thread_db * tdbb, const UCHAR * blr, ULONG blrLength, bool internalFlag, ULONG dbginfoLength, const UCHAR * dbginfo) (src\jrd\cmp.cpp:155)
CMP_compile_request(Jrd::thread_db * tdbb, const UCHAR * blr, ULONG blrLength, bool internalFlag) (src\jrd\cmp.cpp:216)
Jrd::AutoRequest::compile(Jrd::AutoRequest * const this, Jrd::thread_db * tdbb, const UCHAR * blr, ULONG blrLength) (src\jrd\exe_proto.h:171)
MET_get_shadow_files(Jrd::thread_db * tdbb, bool delete_files) (..\Debug\jrd\met.cpp:6539)
SDW_get_shadows(Jrd::thread_db * tdbb) (src\jrd\sdw.cpp:584)
CCH_fetch_lock(Jrd::thread_db * tdbb, Jrd::WIN * window, int lock_type, int wait, SCHAR page_type) (src\jrd\cch.cpp:869)
CCH_fetch(Jrd::thread_db * tdbb, Jrd::WIN * window, int lock_type, SCHAR page_type, int wait, const bool read_shadow) (src\jrd\cch.cpp:802)
CCH_FETCH(Jrd::thread_db * tdbb, Jrd::win * window, USHORT lock_type, SCHAR page_type) (src\jrd\cch_proto.h:84)
TRA_update_counters(Jrd::thread_db * tdbb, Jrd::Database * dbb) (src\jrd\tra.cpp:944)
JRD_shutdown_database(Jrd::Database * dbb, const unsigned int flags) (src\jrd\jrd.cpp:8155)
purge_attachment(Jrd::thread_db * tdbb, Jrd::StableAttachmentPart * sAtt, unsigned int flags) (src\jrd\jrd.cpp:8628)
Jrd::JAttachment::freeEngineData(Jrd::JAttachment * const this, Firebird::CheckStatusWrapper * user_status, bool forceFree) (src\jrd\jrd.cpp:3477)
Jrd::JAttachment::internalDetach(Jrd::JAttachment * const this, Firebird::CheckStatusWrapper * user_status) (src\jrd\jrd.cpp:3414)
Jrd::JAttachment::detach(Jrd::JAttachment * const this, Firebird::CheckStatusWrapper * user_status) (src\jrd\jrd.cpp:3426)
Firebird::IAttachmentBaseImpl<Jrd::JAttachment, Firebird::CheckStatusWrapper, Firebird::IReferenceCountedImpl<Jrd::JAttachment, Firebird::CheckStatusWrapper, Firebird::Inherit<Firebird::IVersionedImpl<Jrd::JAttachment, Firebird::CheckStatusWrapper, Firebird::Inherit<Firebird::IAttachment> > > > >::cloopdetachDispatcher(Firebird::IAttachment * self, Firebird::IStatus * status) (src\include\firebird\IdlFbInterfaces.h:13379)
Firebird::IAttachment::detach<Firebird::CheckStatusWrapper>(Firebird::IAttachment * const this, Firebird::CheckStatusWrapper * status) (src\include\firebird\IdlFbInterfaces.h:2852)
Why::YAttachment::<lambda()>::operator()(void) const(const Why::YAttachment::<lambda()> * const __closure) (src\yvalve\why.cpp:6029)
std::_Function_handler<void(), Why::YAttachment::detach(Firebird::CheckStatusWrapper*)::<lambda()> >::_M_invoke(const std::_Any_data &)(const std::_Any_data & __functor) (\usr\include\c++\8\bits\std_function.h:297)
std::function<void ()>::operator()() const(const std::function<void()> * const this) (\usr\include\c++\8\bits\std_function.h:687)
Why::done<Why::YAttachment>(Firebird::CheckStatusWrapper*, Why::YEntry<Why::YAttachment>&, Why::YAttachment*, std::function<void ()>, std::function<void ()>)(Firebird::CheckStatusWrapper * status, Why::YEntry<Why::YAttachment> & entry, Why::YAttachment * y, std::function<void()> newClose, std::function<void()> oldClose) (src\yvalve\why.cpp:1355)
Why::YAttachment::detach(Why::YAttachment * const this, Firebird::CheckStatusWrapper * status) (src\yvalve\why.cpp:6028)
Firebird::IAttachmentBaseImpl<Why::YAttachment, Firebird::CheckStatusWrapper, Firebird::IReferenceCountedImpl<Why::YAttachment, Firebird::CheckStatusWrapper, Firebird::Inherit<Firebird::IVersionedImpl<Why::YAttachment, Firebird::CheckStatusWrapper, Firebird::Inherit<Firebird::IAttachment> > > > >::cloopdetachDispatcher(Firebird::IAttachment * self, Firebird::IStatus * status) (src\include\firebird\IdlFbInterfaces.h:13379)
Firebird::IAttachment::detach<Firebird::CheckStatusWrapper>(Firebird::IAttachment * const this, Firebird::CheckStatusWrapper * status) (src\include\firebird\IdlFbInterfaces.h:2852)
rem_port::end_database(rem_port * const this, PACKET * sendL) (src\remote\server\server.cpp:3347)
process_packet(rem_port * port, PACKET * sendL, PACKET * receive, rem_port ** result) (src\remote\server\server.cpp:5244)
loopThread() (src\remote\server\server.cpp:7138)
(anonymous namespace)::ThreadArgs::run((anonymous namespace)::ThreadArgs * const this) (src\common\ThreadStart.cpp:78)
(anonymous namespace)::threadStart(void * arg) (src\common\ThreadStart.cpp:94)
libpthread.so.0!start_thread (Unknown Source:0)
libc.so.6!clone (Unknown Source:0)
The easiest way to reproduce it is fbtest
{ 'id': 'bug', 'qmid': None, 'title': 'Deleting a shadow', 'description': '', 'min_versions': '2.6', 'versions': [ { 'firebird_version': '3.0', 'platform': 'All', 'page_size': '4096', 'test_type': 'python', 'test_script': ''' import os Shadow1Path = os.path.join(context['temp_directory'], 'DDL_Shadow.shd') script=""" CREATE SHADOW 1 MANUAL '%s'; commit; DROP SHADOW 1; """ %(Shadow1Path) runProgram('isql', [dsn, '-user', user_name, '-password', user_password, '-q'], script) ''', 'expected_stdout': """ """, 'expected_stderr': """ """ } ] }The stack: