From 31cf24c13e5291294cfe8b3aa33e190db299bb11 Mon Sep 17 00:00:00 2001 From: Marcus Overhagen Date: Tue, 21 Aug 2007 18:44:55 +0000 Subject: [PATCH] debugging instrumentation for Cortex lockup bug (some weeks old already) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22029 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/media/DataExchange.cpp | 11 ++++++++ src/kits/media/MediaNode.cpp | 46 +++++++++++++++++++++------------ src/kits/media/MediaRoster.cpp | 5 ++-- src/kits/media/TimeSource.cpp | 2 ++ 4 files changed, 46 insertions(+), 18 deletions(-) diff --git a/src/kits/media/DataExchange.cpp b/src/kits/media/DataExchange.cpp index 657851eccb..45cc0a9b56 100644 --- a/src/kits/media/DataExchange.cpp +++ b/src/kits/media/DataExchange.cpp @@ -74,6 +74,13 @@ void find_media_addon_server_port() } +static void check(int code) +{ + static int rep = 0; + if(code == 0x204 && rep++ == 200) + debugger("scheisse!"); +} + status_t request_data::SendReply(status_t result, reply_data *reply, int replysize) const { @@ -138,6 +145,7 @@ status_t QueryAddonServer(int32 msgcode, request_data *request, int requestsize, status_t SendToPort(port_id sendport, int32 msgcode, command_data *msg, int size) { status_t rv; + check(msgcode); rv = write_port_etc(sendport, msgcode, msg, size, B_RELATIVE_TIMEOUT, TIMEOUT); if (rv != B_OK) { ERROR("SendToPort: write_port failed, msgcode 0x%lx, port %ld, error %#lx (%s)\n", msgcode, sendport, rv, strerror(rv)); @@ -150,6 +158,7 @@ status_t SendToPort(port_id sendport, int32 msgcode, command_data *msg, int size } else { return rv; } + check(msgcode); rv = write_port_etc(sendport, msgcode, msg, size, B_RELATIVE_TIMEOUT, TIMEOUT); if (rv != B_OK) { ERROR("SendToPort: retrying write_port failed, msgcode 0x%lx, port %ld, error %#lx (%s)\n", msgcode, sendport, rv, strerror(rv)); @@ -167,6 +176,7 @@ status_t QueryPort(port_id requestport, int32 msgcode, request_data *request, in request->reply_port = _PortPool->GetPort(); + check(msgcode); rv = write_port_etc(requestport, msgcode, request, requestsize, B_RELATIVE_TIMEOUT, TIMEOUT); if (rv != B_OK) { @@ -181,6 +191,7 @@ status_t QueryPort(port_id requestport, int32 msgcode, request_data *request, in _PortPool->PutPort(request->reply_port); return rv; } + check(msgcode); rv = write_port_etc(requestport, msgcode, request, requestsize, B_RELATIVE_TIMEOUT, TIMEOUT); if (rv != B_OK) { ERROR("QueryPort: retrying write_port failed, msgcode 0x%lx, port %ld, error %#lx (%s)\n", msgcode, requestport, rv, strerror(rv)); diff --git a/src/kits/media/MediaNode.cpp b/src/kits/media/MediaNode.cpp index 2e9b019a6b..9b6750185f 100644 --- a/src/kits/media/MediaNode.cpp +++ b/src/kits/media/MediaNode.cpp @@ -26,7 +26,7 @@ * THE SOFTWARE. * */ - +//#define DEBUG 7 #include #include #include @@ -47,6 +47,15 @@ using std::nothrow; using std::nothrow_t; +#undef TRACE +//#define TRACE_MEDIA_NODE +#ifdef TRACE_MEDIA_NODE + #define TRACE printf +#else + #define TRACE(x...) +#endif + + // don't rename this one, it's used and exported for binary compatibility int32 BMediaNode::_m_changeTag = 0; @@ -347,7 +356,7 @@ BMediaNode::WaitForMessage(bigtime_t waitUntil, uint32 flags, void *_reserved_) { - PRINT(6, "CALLED BMediaNode::WaitForMessage()\n"); + TRACE("entering: BMediaNode::WaitForMessage()\n"); // This function waits until either real time specified by // waitUntil or a message is received on the control port. @@ -364,10 +373,10 @@ BMediaNode::WaitForMessage(bigtime_t waitUntil, return size; // return the error code } - PRINT(7, "BMediaNode::WaitForMessage %#lx, node %ld, this %p\n", message, fNodeID, this); + TRACE("BMediaNode::WaitForMessage request is: %#lx, node %ld, this %p\n", message, fNodeID, this); if (message > NODE_MESSAGE_START && message < NODE_MESSAGE_END) { - PRINT(4, "BMediaNode::WaitForMessage calling BMediaNode\n"); + TRACE("BMediaNode::WaitForMessage calling BMediaNode\n"); if (B_OK == BMediaNode::HandleMessage(message, data, size)) return B_OK; } @@ -375,7 +384,7 @@ BMediaNode::WaitForMessage(bigtime_t waitUntil, if (message > PRODUCER_MESSAGE_START && message < PRODUCER_MESSAGE_END) { if (!fProducerThis) fProducerThis = dynamic_cast(this); - PRINT(4, "BMediaNode::WaitForMessage calling BBufferProducer %p\n", fProducerThis); + TRACE("BMediaNode::WaitForMessage calling BBufferProducer %p\n", fProducerThis); if (fProducerThis && B_OK == fProducerThis->BBufferProducer::HandleMessage(message, data, size)) return B_OK; } @@ -383,7 +392,7 @@ BMediaNode::WaitForMessage(bigtime_t waitUntil, if (message > CONSUMER_MESSAGE_START && message < CONSUMER_MESSAGE_END) { if (!fConsumerThis) fConsumerThis = dynamic_cast(this); - PRINT(4, "BMediaNode::WaitForMessage calling BBufferConsumer %p\n", fConsumerThis); + TRACE("BMediaNode::WaitForMessage calling BBufferConsumer %p\n", fConsumerThis); if (fConsumerThis && B_OK == fConsumerThis->BBufferConsumer::HandleMessage(message, data, size)) return B_OK; } @@ -391,7 +400,7 @@ BMediaNode::WaitForMessage(bigtime_t waitUntil, if (message > FILEINTERFACE_MESSAGE_START && message < FILEINTERFACE_MESSAGE_END) { if (!fFileInterfaceThis) fFileInterfaceThis = dynamic_cast(this); - PRINT(4, "BMediaNode::WaitForMessage calling BFileInterface %p\n", fFileInterfaceThis); + TRACE("BMediaNode::WaitForMessage calling BFileInterface %p\n", fFileInterfaceThis); if (fFileInterfaceThis && B_OK == fFileInterfaceThis->BFileInterface::HandleMessage(message, data, size)) return B_OK; } @@ -399,7 +408,7 @@ BMediaNode::WaitForMessage(bigtime_t waitUntil, if (message > CONTROLLABLE_MESSAGE_START && message < CONTROLLABLE_MESSAGE_END) { if (!fControllableThis) fControllableThis = dynamic_cast(this); - PRINT(4, "BMediaNode::WaitForMessage calling BControllable %p\n", fControllableThis); + TRACE("BMediaNode::WaitForMessage calling BControllable %p\n", fControllableThis); if (fControllableThis && B_OK == fControllableThis->BControllable::HandleMessage(message, data, size)) return B_OK; } @@ -407,12 +416,12 @@ BMediaNode::WaitForMessage(bigtime_t waitUntil, if (message > TIMESOURCE_MESSAGE_START && message < TIMESOURCE_MESSAGE_END) { if (!fTimeSourceThis) fTimeSourceThis = dynamic_cast(this); - PRINT(4, "BMediaNode::WaitForMessage calling BTimeSource %p\n", fTimeSourceThis); + TRACE("BMediaNode::WaitForMessage calling BTimeSource %p\n", fTimeSourceThis); if (fTimeSourceThis && B_OK == fTimeSourceThis->BTimeSource::HandleMessage(message, data, size)) return B_OK; } - PRINT(4, "BMediaNode::WaitForMessage calling default\n"); + TRACE("BMediaNode::WaitForMessage calling default HandleMessage\n"); if (B_OK == HandleMessage(message, data, size)) return B_OK; @@ -522,7 +531,7 @@ BMediaNode::HandleMessage(int32 message, const void *data, size_t size) { - PRINT(4, "BMediaNode::HandleMessage %#lx, node %ld\n", message, fNodeID); + TRACE("BMediaNode::HandleMessage %#lx, node %ld\n", message, fNodeID); switch (message) { case NODE_FINAL_RELEASE: { @@ -546,7 +555,7 @@ BMediaNode::HandleMessage(int32 message, case NODE_START: { const node_start_command *command = static_cast(data); - printf("NODE_START, node %ld\n", fNodeID); + TRACE("BMediaNode::HandleMessage NODE_START, node %ld\n", fNodeID); Start(command->performance_time); return B_OK; } @@ -554,7 +563,7 @@ BMediaNode::HandleMessage(int32 message, case NODE_STOP: { const node_stop_command *command = static_cast(data); - printf("NODE_STOP, node %ld\n", fNodeID); + TRACE("BMediaNode::HandleMessage NODE_STOP, node %ld\n", fNodeID); Stop(command->performance_time, command->immediate); return B_OK; } @@ -562,7 +571,7 @@ BMediaNode::HandleMessage(int32 message, case NODE_SEEK: { const node_seek_command *command = static_cast(data); - printf("NODE_SEEK, node %ld\n", fNodeID); + TRACE("BMediaNode::HandleMessage NODE_SEEK, node %ld\n", fNodeID); Seek(command->media_time, command->performance_time); return B_OK; } @@ -570,6 +579,7 @@ BMediaNode::HandleMessage(int32 message, case NODE_SET_RUN_MODE: { const node_set_run_mode_command *command = static_cast(data); + TRACE("BMediaNode::HandleMessage NODE_SET_RUN_MODE, node %ld\n", fNodeID); // when changing this, also change PRODUCER_SET_RUN_MODE_DELAY fRunMode = command->mode; SetRunMode(fRunMode); @@ -579,12 +589,14 @@ BMediaNode::HandleMessage(int32 message, case NODE_TIME_WARP: { const node_time_warp_command *command = static_cast(data); + TRACE("BMediaNode::HandleMessage NODE_TIME_WARP, node %ld\n", fNodeID); TimeWarp(command->at_real_time, command->to_performance_time); return B_OK; } case NODE_PREROLL: { + TRACE("BMediaNode::HandleMessage NODE_PREROLL, node %ld\n", fNodeID); Preroll(); return B_OK; } @@ -593,7 +605,7 @@ BMediaNode::HandleMessage(int32 message, { const node_set_timesource_command *command = static_cast(data); - TRACE("NODE_SET_TIMESOURCE, node %ld, timesource %ld enter\n", fNodeID, command->timesource_id); + TRACE("BMediaNode::HandleMessage NODE_SET_TIMESOURCE, node %ld, timesource %ld enter\n", fNodeID, command->timesource_id); fTimeSourceID = command->timesource_id; @@ -613,7 +625,7 @@ BMediaNode::HandleMessage(int32 message, // any derived class SetTimeSource(fTimeSource); - TRACE("NODE_SET_TIMESOURCE, node %ld, timesource %ld leave\n", fNodeID, command->timesource_id); + TRACE("BMediaNode::HandleMessage NODE_SET_TIMESOURCE, node %ld, timesource %ld leave\n", fNodeID, command->timesource_id); return B_OK; } @@ -621,6 +633,7 @@ BMediaNode::HandleMessage(int32 message, case NODE_GET_TIMESOURCE: { const node_get_timesource_request *request = static_cast(data); + TRACE("BMediaNode::HandleMessage NODE_GET_TIMESOURCE, node %ld\n", fNodeID); node_get_timesource_reply reply; reply.timesource_id = fTimeSourceID; request->SendReply(B_OK, &reply, sizeof(reply)); @@ -630,6 +643,7 @@ BMediaNode::HandleMessage(int32 message, case NODE_REQUEST_COMPLETED: { const node_request_completed_command *command = static_cast(data); + TRACE("BMediaNode::HandleMessage NODE_REQUEST_COMPLETED, node %ld\n", fNodeID); RequestCompleted(command->info); return B_OK; } diff --git a/src/kits/media/MediaRoster.cpp b/src/kits/media/MediaRoster.cpp index 79f0685f01..dc04f49ba3 100644 --- a/src/kits/media/MediaRoster.cpp +++ b/src/kits/media/MediaRoster.cpp @@ -30,6 +30,7 @@ /* to comply with the license above, do not remove the following line */ char __dont_remove_copyright_from_binary[] = "Copyright (c) 2002-2006 Marcus Overhagen "; +//#define DEBUG 7 #include #include #include @@ -1204,7 +1205,7 @@ status_t BMediaRoster::SetRunModeNode(const media_node & node, BMediaNode::run_mode mode) { - CALLED(); + TRACE("BMediaRoster::SetRunModeNode, node %ld, mode %d\n", node.node, mode); if (IS_INVALID_NODE(node)) return B_MEDIA_BAD_NODE; @@ -1243,7 +1244,7 @@ BMediaRoster::SetProducerRunModeDelay(const media_node & node, bigtime_t delay, BMediaNode::run_mode mode) { - CALLED(); + TRACE("BMediaRoster::SetProducerRunModeDelay, node %ld, delay %Ld, mode %d\n", node.node, delay, mode); if (IS_INVALID_NODE(node)) return B_MEDIA_BAD_NODE; if ((node.kind & B_BUFFER_PRODUCER) == 0) diff --git a/src/kits/media/TimeSource.cpp b/src/kits/media/TimeSource.cpp index 6888bef719..809a7b51c1 100644 --- a/src/kits/media/TimeSource.cpp +++ b/src/kits/media/TimeSource.cpp @@ -477,6 +477,8 @@ BTimeSource::AddMe(BMediaNode *node) cmd.node = node->Node(); SendToPort(fControlPort, TIMESOURCE_ADD_SLAVE_NODE, &cmd, sizeof(cmd)); } else { + if (this == dynamic_cast(node)) + debugger("fuck you!"); DirectAddMe(node->Node()); } return B_OK;