I added GDB to this line: LD_LIBRARY_PATH=/home/firebox/usr/local/wxWidgets-2.8.7/lib/:/home/firebox/usr/local/libupnp/lib/ LANG=en_US.UTF-8 gdb /home/firebox/usr/local/amule/bin/amuled <--Hope that's right..
[Debug] Generating a stack trace... please waitamuled.cpp(144): assert "(fd > 2) && (fd < 1024)" failed in AddSocket().
Call stack:
[00] 0xb7dc9196
[01] wxAppConsole::OnAssertFailure(wchar_t const*, int, wchar_t const*, wchar_t const*, wchar_t const*)
[02] CamuleApp::OnAssertFailure(wchar_t const*, int, wchar_t const*, wchar_t const*, wchar_t const*) /home/firebox/amule-cvs/src/amule.cpp:1377
[03] wxOnAssert(wchar_t const*, int, char const*, wchar_t const*, wchar_t const*)
[04] CSocketSet::AddSocket(GSocket*) /home/firebox/amule-cvs/src/amuled.cpp:146
[05] CAmuledGSocketFuncTable::AddSocket(GSocket*, GSocketEvent) /home/firebox/amule-cvs/src/amuled.cpp:216
[06] CAmuledGSocketFuncTable::Install_Callback(GSocket*, GSocketEvent) /home/firebox/amule-cvs/src/amuled.cpp:288
[07] CAmuledGSocketFuncTable::Enable_Events(GSocket*) /home/firebox/amule-cvs/src/amuled.cpp:298
[08] GSocket::WaitConnection()
[09] wxSocketServer::AcceptWith(wxSocketBase&, bool)
[10] CListenSocket::OnAccept(int) /home/firebox/amule-cvs/src/ListenSocket.cpp:141
[11] CamuleApp::ListenSocketHandler(wxSocketEvent&) /home/firebox/amule-cvs/src/amule.cpp:2010
[12] wxAppConsole::HandleEvent(wxEvtHandler*, void (wxEvtHandler::*)(wxEvent&), wxEvent&) const
[13] wxEvtHandler::ProcessEventIfMatches(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&)
[14] wxEventHashTable::HandleEvent(wxEvent&, wxEvtHandler*)
[15] wxEvtHandler::ProcessEvent(wxEvent&)
[16] wxEvtHandler::ProcessPendingEvents()
[17] wxAppConsole::ProcessPendingEvents()
[18] CamuleDaemonApp::OnRun() /home/firebox/amule-cvs/src/amuled.cpp:428
Program received signal SIGTRAP, Trace/breakpoint trap.
[Switching to Thread -1213417792 (LWP 3121)]
0xffffe410 in __kernel_vsyscall ()
(gdb) bt
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7f7e590 in raise () from /lib/tls/i686/cmov/libpthread.so.0
#2 0xb7dc8f9e in wxTrap () at ./src/common/appbase.cpp:672
#3 0xb7dc8ff9 in DoShowAssertDialog (msg=@0xbfecc06c)
at ./src/common/appbase.cpp:769
#4 0xb7dc946d in wxAppTraitsBase::ShowAssertDialog (this=0x86805a8,
msgOriginal=@0xbfecc0cc) at ./src/common/appbase.cpp:555
#5 0xb7dc94ee in wxConsoleAppTraitsBase::ShowAssertDialog (this=0x86805a8,
msg=@0xbfecc0cc) at ./src/common/appbase.cpp:505
#6 0xb7dc9196 in ShowAssertDialog (szFile=0x83467dc, nLine=144,
szFunc=0xb421da44, szCond=0x8346824, szMsg=0x0, traits=0x86805a8)
at ./src/common/appbase.cpp:839
#7 0xb7dc93bc in wxAppConsole::OnAssertFailure (this=0x8678ee0,
file=0x83467dc, line=144, func=0xb421da44, cond=0x8346824, msg=0x0)
at ./src/common/appbase.cpp:443
#8 0x08066175 in CamuleApp::OnAssertFailure (this=0x8678ee0, file=0x83467dc,
line=144, func=0xb421da44, cond=0x8346824, msg=0x0) at amule.cpp:1377
#9 0xb7dc92b7 in wxOnAssert (szFile=0x83467dc, nLine=144,
szFunc=0x83474f5 "AddSocket", szCond=0x8346824, szMsg=0x0)
at ./src/common/appbase.cpp:712
#10 0x0805d196 in CSocketSet::AddSocket (this=0x86792f0, socket=0xb52ede98)
at amuled.cpp:144
#11 0x0805d6c9 in CAmuledGSocketFuncTable::AddSocket (this=0x8679138,
---Type <return> to continue, or q <return> to quit---
socket=0xb52ede98, event=GSOCK_INPUT) at amuled.cpp:216
#12 0x0805d731 in CAmuledGSocketFuncTable::Install_Callback (this=0x8679138,
sock=0xb52ede98, e=GSOCK_INPUT) at amuled.cpp:287
#13 0x0805c6ab in CAmuledGSocketFuncTable::Enable_Events (this=0x8679138,
socket=0xb52ede98) at amuled.cpp:297
#14 0xb7f5fbd7 in GSocket::WaitConnection (this=0x921be30)
at ./src/unix/gsocket.cpp:895
#15 0xb7f58889 in wxSocketServer::AcceptWith (this=0x92198b0,
sock=@0xb1243ae8, wait=false) at ./src/common/socket.cpp:1142
#16 0x08152685 in CListenSocket::OnAccept (this=0x92198b0, nErrorCode=0)
at ListenSocket.cpp:141
#17 0x08063393 in CamuleApp::ListenSocketHandler (this=0x8678ee0,
event=@0xb346cb30) at amule.cpp:2010
#18 0xb7dc8dff in wxAppConsole::HandleEvent (this=0x8678ee0,
handler=0x8678ee0, func=
(void ( class wxEvtHandler::*)(class wxEvent &,)) 16827996,
event=@0xb346cb30) at ./src/common/appbase.cpp:320
#19 0xb7e886d2 in wxEvtHandler::ProcessEventIfMatches (entry=@0x846d820,
handler=0x8678ee0, event=@0xb346cb30) at ./src/common/event.cpp:1225
#20 0xb7e8a4ee in wxEventHashTable::HandleEvent (this=0x846d800,
event=@0xb346cb30, self=0x8678ee0) at ./src/common/event.cpp:898
#21 0xb7e8a654 in wxEvtHandler::ProcessEvent (this=0x8678ee0,
event=@0xb346cb30) at ./src/common/event.cpp:1287
---Type <return> to continue, or q <return> to quit---
#22 0xb7e88faa in wxEvtHandler::ProcessPendingEvents (this=0x8678ee0)
at ./src/common/event.cpp:1183
#23 0xb7dc9f11 in wxAppConsole::ProcessPendingEvents (this=0x8678ee0)
at ./src/common/appbase.cpp:292
#24 0x0805e251 in CamuleDaemonApp::OnRun (this=0x8678ee0) at amuled.cpp:427
#25 0xb7e11bda in wxEntry (argc=@0xb7f314cc, argv=0x86673a0)
at ./src/common/init.cpp:456
#26 0xb7e11ca5 in wxEntry (argc=@0xbfecc590, argv=0xbfecc614)
at ./src/common/init.cpp:468
#27 0x0805e2b0 in main (argc=Cannot access memory at address 0xc31
) at amuled.cpp:101
(gdb) bt full
#0 0xffffe410 in __kernel_vsyscall ()
No symbol table info available.
#1 0xb7f7e590 in raise () from /lib/tls/i686/cmov/libpthread.so.0
No symbol table info available.
#2 0xb7dc8f9e in wxTrap () at ./src/common/appbase.cpp:672
No locals.
#3 0xb7dc8ff9 in DoShowAssertDialog (msg=@0xbfecc06c)
at ./src/common/appbase.cpp:769
No locals.
#4 0xb7dc946d in wxAppTraitsBase::ShowAssertDialog (this=0x86805a8,
msgOriginal=@0xbfecc0cc) at ./src/common/appbase.cpp:555
msg = {<wxStringBase> = {static npos = 4294967295,
m_pchData = 0xb1a9fa0c}, <No data fields>}
stackTrace = {<wxStringBase> = {static npos = 4294967295,
m_pchData = 0xb4e87514}, <No data fields>}
#5 0xb7dc94ee in wxConsoleAppTraitsBase::ShowAssertDialog (this=0x86805a8,
msg=@0xbfecc0cc) at ./src/common/appbase.cpp:505
No locals.
#6 0xb7dc9196 in ShowAssertDialog (szFile=0x83467dc, nLine=144,
szFunc=0xb421da44, szCond=0x8346824, szMsg=0x0, traits=0x86805a8)
at ./src/common/appbase.cpp:839
msg = {<wxStringBase> = {static npos = 4294967295,
m_pchData = 0xb1aa1a6c}, <No data fields>}
---Type <return> to continue, or q <return> to quit---
s_bNoAsserts = false
#7 0xb7dc93bc in wxAppConsole::OnAssertFailure (this=0x8678ee0,
file=0x83467dc, line=144, func=0xb421da44, cond=0x8346824, msg=0x0)
at ./src/common/appbase.cpp:443
No locals.
#8 0x08066175 in CamuleApp::OnAssertFailure (this=0x8678ee0, file=0x83467dc,
line=144, func=0xb421da44, cond=0x8346824, msg=0x0) at amule.cpp:1377
No locals.
#9 0xb7dc92b7 in wxOnAssert (szFile=0x83467dc, nLine=144,
szFunc=0x83474f5 "AddSocket", szCond=0x8346824, szMsg=0x0)
at ./src/common/appbase.cpp:712
strFunc = {<wxStringBase> = {static npos = 4294967295,
m_pchData = 0xb421da44}, <No data fields>}
s_bInAssert = true
#10 0x0805d196 in CSocketSet::AddSocket (this=0x86792f0, socket=0xb52ede98)
at amuled.cpp:144
fd = 1024
__FUNCTION__ = "AddSocket"
#11 0x0805d6c9 in CAmuledGSocketFuncTable::AddSocket (this=0x8679138,
socket=0xb52ede98, event=GSOCK_INPUT) at amuled.cpp:216
lock = {m_isOk = true, m_mutex = @0x8679144}
#12 0x0805d731 in CAmuledGSocketFuncTable::Install_Callback (this=0x8679138,
sock=0xb52ede98, e=GSOCK_INPUT) at amuled.cpp:287
---Type <return> to continue, or q <return> to quit---
No locals.
#13 0x0805c6ab in CAmuledGSocketFuncTable::Enable_Events (this=0x8679138,
socket=0xb52ede98) at amuled.cpp:297
No locals.
#14 0xb7f5fbd7 in GSocket::WaitConnection (this=0x921be30)
at ./src/unix/gsocket.cpp:895
from = {sa_family = 2,
sa_data = "\004�R6��\000\000\000\000\000\000\000"}
fromlen = 16
connection = (GSocket *) 0xb52ede98
err = GSOCK_NOERROR
arg = 1
__PRETTY_FUNCTION__ = "GSocket* GSocket::WaitConnection()"
#15 0xb7f58889 in wxSocketServer::AcceptWith (this=0x92198b0,
sock=@0xb1243ae8, wait=false) at ./src/common/socket.cpp:1142
child_socket = (class GSocket *) 0x0
#16 0x08152685 in CListenSocket::OnAccept (this=0x92198b0, nErrorCode=0)
at ListenSocket.cpp:141
newclient = (class CClientTCPSocket *) 0xb1243ae8
__FUNCTION__ = "OnAccept"
#17 0x08063393 in CamuleApp::ListenSocketHandler (this=0x8678ee0,
event=@0xb346cb30) at amule.cpp:2010
__FUNCTION__ = "ListenSocketHandler"
---Type <return> to continue, or q <return> to quit---
#18 0xb7dc8dff in wxAppConsole::HandleEvent (this=0x8678ee0,
handler=0x8678ee0, func=
(void ( class wxEvtHandler::*)(class wxEvent &,)) 16827996,
event=@0xb346cb30) at ./src/common/appbase.cpp:320
No locals.
#19 0xb7e886d2 in wxEvtHandler::ProcessEventIfMatches (entry=@0x846d820,
handler=0x8678ee0, event=@0xb346cb30) at ./src/common/event.cpp:1225
tableId1 = 6122
tableId2 = -1
#20 0xb7e8a4ee in wxEventHashTable::HandleEvent (this=0x846d800,
event=@0xb346cb30, self=0x8678ee0) at ./src/common/event.cpp:898
n = 0
eventEntryTable = (
const wxEventTableEntryPointerArray &) @0x89f4fcc: {<wxBaseArrayPtrVoid> = {m_nSize = 3, m_nCount = 3, m_pItems = 0x91f55e0}, <No data fields>}
count = 3
eventType = 10002
eTTnode = (wxEventHashTable::EventTypeTable * const) 0x89f4fc8
#21 0xb7e8a654 in wxEvtHandler::ProcessEvent (this=0x8678ee0,
event=@0xb346cb30) at ./src/common/event.cpp:1287
__FUNCTION__ = "ProcessEvent"
#22 0xb7e88faa in wxEvtHandler::ProcessPendingEvents (this=0x8678ee0)
at ./src/common/event.cpp:1183
---Type <return> to continue, or q <return> to quit---
event = (wxEvent *) 0xb346cb30
node = {m_ptr = 0xb3141818}
n = 1
__FUNCTION__ = "ProcessPendingEvents"
#23 0xb7dc9f11 in wxAppConsole::ProcessPendingEvents (this=0x8678ee0)
at ./src/common/appbase.cpp:292
handler = (class wxEvtHandler *) 0x8678ee0
node = {m_ptr = 0xb2cae178}
#24 0x0805e251 in CamuleDaemonApp::OnRun (this=0x8678ee0) at amuled.cpp:427
No locals.
#25 0xb7e11bda in wxEntry (argc=@0xb7f314cc, argv=0x86673a0)
at ./src/common/init.cpp:456
callOnExit = {<No data fields>}
cleanupOnExit = {<No data fields>}
#26 0xb7e11ca5 in wxEntry (argc=@0xbfecc590, argv=0xbfecc614)
at ./src/common/init.cpp:468
No locals.
#27 0x0805e2b0 in main (argc=Cannot access memory at address 0xc31
) at amuled.cpp:101
No locals.
(gdb) thread apply all bt
Thread 4 (Thread -1231475824 (LWP 3134)):
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7f7a8fc in pthread_cond_timedwait@@GLIBC_2.3.2 ()
from /lib/tls/i686/cmov/libpthread.so.0
#2 0xb7e84317 in wxConditionInternal::WaitTimeout (this=0x9219e48,
milliseconds=300) at ./src/unix/threadpsx.cpp:405
#3 0xb7e843fc in wxCondition::WaitTimeout (this=0x8680924, milliseconds=300)
at ./include/wx/thrimpl.cpp:256
#4 0xb7e85245 in wxSemaphoreInternal::WaitTimeout (this=0x8680920,
milliseconds=300) at ./src/unix/threadpsx.cpp:552
#5 0xb7e8532e in wxSemaphore::WaitTimeout (this=0x86b5ba8, milliseconds=300)
at ./include/wx/thrimpl.cpp:320
#6 0x0806097e in CTimerThread::Entry (this=0x86b5b88) at Timer.cpp:63
#7 0xb7e86620 in wxThreadInternal::PthreadStart (thread=0x86b5b88)
at ./src/unix/threadpsx.cpp:766
#8 0xb7e8678b in wxPthreadStart (ptr=0x86b5b88)
at ./src/unix/threadpsx.cpp:718
#9 0xb7f7646b in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#10 0xb7ba46de in clone () from /lib/tls/i686/cmov/libc.so.6
Thread 2 (Thread -1214690416 (LWP 3132)):
#0 0xffffe410 in __kernel_vsyscall ()
---Type <return> to continue, or q <return> to quit---
#1 0xb7f7ce1e in __lll_mutex_lock_wait ()
from /lib/tls/i686/cmov/libpthread.so.0
#2 0xb7f78b74 in _L_mutex_lock_218 () from /lib/tls/i686/cmov/libpthread.so.0
#3 0xb7f78609 in pthread_mutex_lock () from /lib/tls/i686/cmov/libpthread.so.0
#4 0xb7e84b6b in wxMutexInternal::Lock (this=0x8679178)
at ./src/unix/threadpsx.cpp:248
#5 0xb7e84c93 in wxMutex::Lock (this=0x8679144) at ./include/wx/thrimpl.cpp:44
#6 0x0805f3a1 in wxMutexLocker (this=0xb7993ecc, mutex=@0x8679144)
at /home/firebox/usr/local/wxWidgets-2.8.7//include/wx-2.8/wx/thread.h:176
#7 0x0805d6ae in CAmuledGSocketFuncTable::AddSocket (this=0x8679138,
socket=0xb887e20, event=GSOCK_OUTPUT) at amuled.cpp:213
#8 0x0805d731 in CAmuledGSocketFuncTable::Install_Callback (this=0x8679138,
sock=0xb887e20, e=GSOCK_OUTPUT) at amuled.cpp:287
#9 0xb7f5da80 in GSocket::Enable (this=0xb887e20, event=GSOCK_OUTPUT)
at ./src/unix/gsocket.cpp:1516
#10 0xb7f5f0fd in GSocket::Write (this=0xb887e20,
buffer=0xb4833c13 "�\227\027��\226��>24ngwR��o\227��N\030�!����� �Z\032Jíe[fyV�uk�!\200��\224��;�����i�I:\203�6)\027D\\\023\206ng�\224R\215PXIS[R�\025�\225�)\230\031\024gwzk�\"Vn� \233�dX�~�Ig�/���(#\202�l$��\036��\221�\231Vm�\023)�\223A�y\230*�ݬ����� Ь\226\031�j�ˡr���n\206\232��\230�B\030�8�ZG\035\203�JX\211\tU�|&�}\214�=�+\222B�"..., size=2344) at ./src/unix/gsocket.cpp:1252
#11 0xb7f5957e in wxSocketBase::_Write (this=0xb8e6830, buffer=0xb4833c13,
nbytes=2344) at ./src/common/socket.cpp:539
---Type <return> to continue, or q <return> to quit---
#12 0xb7f597d8 in wxSocketBase::Write (this=0xb8e6830, buffer=0xb4833c13,
nbytes=2344) at ./src/common/socket.cpp:507
#13 0x0827527f in CSocketClientProxy::Write (this=0xb8e6830,
buffer=0xb4833c13, nbytes=2344) at Proxy.cpp:1292
#14 0x081148a6 in CEncryptedStreamSocket::Write (this=0xb8e6830,
lpBuf=0xb4833c13, nBufLen=2344) at EncryptedStreamSocket.cpp:212
#15 0x08110b1a in CEMSocket::Send (this=0xb8e6830,
maxNumberOfBytesToSend=2600, minFragSize=2600,
onlyAllowedToSendControlPacket=false) at EMSocket.cpp:616
#16 0x080bfe22 in CEMSocket::SendFileAndControlData (this=0xb8e6830,
maxNumberOfBytesToSend=70, minFragSize=2600) at EMSocket.h:73
#17 0x080af240 in CClientTCPSocket::SendFileAndControlData (this=0xb8e6830,
maxNumberOfBytesToSend=70, overchargeMaxBytesToSend=2600)
at ClientTCPSocket.cpp:2098
#18 0x081a3dd9 in UploadBandwidthThrottler::Entry (this=0x91f5330)
at UploadBandwidthThrottler.cpp:438
#19 0xb7e86620 in wxThreadInternal::PthreadStart (thread=0x91f5330)
at ./src/unix/threadpsx.cpp:766
#20 0xb7e8678b in wxPthreadStart (ptr=0x91f5330)
at ./src/unix/threadpsx.cpp:718
#21 0xb7f7646b in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#22 0xb7ba46de in clone () from /lib/tls/i686/cmov/libc.so.6
---Type <return> to continue, or q <return> to quit---
Thread 1 (Thread -1213417792 (LWP 3121)):
#0 0xffffe410 in __kernel_vsyscall ()
#1 0xb7f7e590 in raise () from /lib/tls/i686/cmov/libpthread.so.0
#2 0xb7dc8f9e in wxTrap () at ./src/common/appbase.cpp:672
#3 0xb7dc8ff9 in DoShowAssertDialog (msg=@0xbfecc06c)
at ./src/common/appbase.cpp:769
#4 0xb7dc946d in wxAppTraitsBase::ShowAssertDialog (this=0x86805a8,
msgOriginal=@0xbfecc0cc) at ./src/common/appbase.cpp:555
#5 0xb7dc94ee in wxConsoleAppTraitsBase::ShowAssertDialog (this=0x86805a8,
msg=@0xbfecc0cc) at ./src/common/appbase.cpp:505
#6 0xb7dc9196 in ShowAssertDialog (szFile=0x83467dc, nLine=144,
szFunc=0xb421da44, szCond=0x8346824, szMsg=0x0, traits=0x86805a8)
at ./src/common/appbase.cpp:839
#7 0xb7dc93bc in wxAppConsole::OnAssertFailure (this=0x8678ee0,
file=0x83467dc, line=144, func=0xb421da44, cond=0x8346824, msg=0x0)
at ./src/common/appbase.cpp:443
#8 0x08066175 in CamuleApp::OnAssertFailure (this=0x8678ee0, file=0x83467dc,
line=144, func=0xb421da44, cond=0x8346824, msg=0x0) at amule.cpp:1377
#9 0xb7dc92b7 in wxOnAssert (szFile=0x83467dc, nLine=144,
szFunc=0x83474f5 "AddSocket", szCond=0x8346824, szMsg=0x0)
at ./src/common/appbase.cpp:712
#10 0x0805d196 in CSocketSet::AddSocket (this=0x86792f0, socket=0xb52ede98)
at amuled.cpp:144
---Type <return> to continue, or q <return> to quit---
#11 0x0805d6c9 in CAmuledGSocketFuncTable::AddSocket (this=0x8679138,
socket=0xb52ede98, event=GSOCK_INPUT) at amuled.cpp:216
#12 0x0805d731 in CAmuledGSocketFuncTable::Install_Callback (this=0x8679138,
sock=0xb52ede98, e=GSOCK_INPUT) at amuled.cpp:287
#13 0x0805c6ab in CAmuledGSocketFuncTable::Enable_Events (this=0x8679138,
socket=0xb52ede98) at amuled.cpp:297
#14 0xb7f5fbd7 in GSocket::WaitConnection (this=0x921be30)
at ./src/unix/gsocket.cpp:895
#15 0xb7f58889 in wxSocketServer::AcceptWith (this=0x92198b0,
sock=@0xb1243ae8, wait=false) at ./src/common/socket.cpp:1142
#16 0x08152685 in CListenSocket::OnAccept (this=0x92198b0, nErrorCode=0)
at ListenSocket.cpp:141
#17 0x08063393 in CamuleApp::ListenSocketHandler (this=0x8678ee0,
event=@0xb346cb30) at amule.cpp:2010
#18 0xb7dc8dff in wxAppConsole::HandleEvent (this=0x8678ee0,
handler=0x8678ee0, func=
(void ( class wxEvtHandler::*)(class wxEvent &,)) 16827996,
event=@0xb346cb30) at ./src/common/appbase.cpp:320
#19 0xb7e886d2 in wxEvtHandler::ProcessEventIfMatches (entry=@0x846d820,
handler=0x8678ee0, event=@0xb346cb30) at ./src/common/event.cpp:1225
#20 0xb7e8a4ee in wxEventHashTable::HandleEvent (this=0x846d800,
event=@0xb346cb30, self=0x8678ee0) at ./src/common/event.cpp:898
#21 0xb7e8a654 in wxEvtHandler::ProcessEvent (this=0x8678ee0,
---Type <return> to continue, or q <return> to quit---
event=@0xb346cb30) at ./src/common/event.cpp:1287
#22 0xb7e88faa in wxEvtHandler::ProcessPendingEvents (this=0x8678ee0)
at ./src/common/event.cpp:1183
#23 0xb7dc9f11 in wxAppConsole::ProcessPendingEvents (this=0x8678ee0)
at ./src/common/appbase.cpp:292
#24 0x0805e251 in CamuleDaemonApp::OnRun (this=0x8678ee0) at amuled.cpp:427
#25 0xb7e11bda in wxEntry (argc=@0xb7f314cc, argv=0x86673a0)
at ./src/common/init.cpp:456
#26 0xb7e11ca5 in wxEntry (argc=@0xbfecc590, argv=0xbfecc614)
at ./src/common/init.cpp:468
#27 0x0805e2b0 in main (argc=Cannot access memory at address 0xc31
) at amuled.cpp:101