memspy/Driver/Kernel/Source/SubChannels/MemSpyDriverLogChanClientServer.cpp
branchRCL_3
changeset 20 ca8a1b6995f6
parent 0 a03f92240627
child 21 52e343bb8f80
equal deleted inserted replaced
19:07b41fa8d1dd 20:ca8a1b6995f6
    94 
    94 
    95 	const TInt maxCount = params.iMaxCount;
    95 	const TInt maxCount = params.iMaxCount;
    96     NKern::ThreadEnterCS();
    96     NKern::ThreadEnterCS();
    97 
    97 
    98     DObject* serverHandle = (DObject*) params.iServerHandle;
    98     DObject* serverHandle = (DObject*) params.iServerHandle;
    99     serverHandle = CheckIfObjectIsInContainer( EMemSpyDriverContainerTypeServer, serverHandle );
    99     DServer* server = static_cast<DServer*>(CheckedOpen(EMemSpyDriverContainerTypeServer, serverHandle));
   100     if  ( serverHandle == NULL )
   100     if (server == NULL)
   101         {
   101         {
   102     	Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionHandles() - END - server not found");
   102     	Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionHandles() - END - server not found");
   103         NKern::ThreadLeaveCS();
   103         NKern::ThreadLeaveCS();
   104         return KErrNotFound;
   104         return KErrNotFound;
   105         }
   105         }
   106 
   106 
   107 	ResetTempHandles();
   107 	ResetTempHandles();
   108 
   108 
   109     DServer* server = (DServer*) serverHandle;
   109     NKern::LockSystem(); // Iterating session queue requires system lock
   110     NKern::LockSystem();
   110     // Iterate through this server's sessions, writing back session pointer (handle)
   111 
   111     // to client
   112     r = server->Open();
   112     SDblQue& serverQueue = serverAdaption.GetSessionQueue( *server );
   113     if  ( r == KErrNone )
   113     SDblQueLink* anchor = &serverQueue.iA;
   114         {
   114     SDblQueLink* link = serverQueue.First();
   115         // Iterate through this server's sessions, writing back session pointer (handle)
   115     while( link != anchor )
   116         // to client
   116         {
   117         SDblQue& serverQueue = serverAdaption.GetSessionQueue( *server );
   117 		DSession* session = serverAdaption.GetSession( link );
   118         SDblQueLink* anchor = &serverQueue.iA;
   118 
   119         SDblQueLink* link = serverQueue.First();
   119         // Found a match in the specified container. Write the object's handle (aka the object address)
   120         while( link != anchor )
   120         // back to the client address space
   121         	{
   121         if  ( session )
   122 			DSession* session = serverAdaption.GetSession( link );
   122             {
   123 
   123             AddTempHandle( session );
   124             // Found a match in the specified container. Write the object's handle (aka the object address)
   124             }
   125             // back to the client address space
   125 
   126             if  ( session )
   126         // Get next item
   127                 {
   127         link = link->iNext;
   128                 AddTempHandle( session );
   128         }
   129                 }
       
   130 
       
   131             // Get next item
       
   132             link = link->iNext;
       
   133             }
       
   134 
       
   135         NKern::ThreadEnterCS();
       
   136         TRACE( Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionHandles() - in CS..." ));
       
   137         //
       
   138 	    Kern::SafeClose( (DObject*&) server, NULL );
       
   139         TRACE( Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionHandles() - done safe close..." ));
       
   140         //
       
   141 	    NKern::ThreadLeaveCS();
       
   142         TRACE( Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionHandles() - left CS" ));
       
   143         }
       
   144     else
       
   145         {
       
   146     	Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionHandles - error: %d opening server", r);
       
   147         }
       
   148 
       
   149     NKern::UnlockSystem();
   129     NKern::UnlockSystem();
       
   130 	server->Close(NULL);
       
   131 	NKern::ThreadLeaveCS();
   150 
   132 
   151     // This variable holds the number of handles that we have already
   133     // This variable holds the number of handles that we have already
   152 	// written to the client-side.
   134 	// written to the client-side.
   153 	TInt currentWriteIndex = 0;
   135 	TInt currentWriteIndex = 0;
   154 	const TInt handleCount = TempHandleCount();
   136 	const TInt handleCount = TempHandleCount();
   174             {
   156             {
   175             r = finalWrite;
   157             r = finalWrite;
   176             }
   158             }
   177         }
   159         }
   178 
   160 
   179 	NKern::ThreadLeaveCS();
       
   180 
   161 
   181 	TRACE( Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionHandles() - END - r: %d", r));
   162 	TRACE( Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionHandles() - END - r: %d", r));
   182 	return r;
   163 	return r;
   183     }
   164     }
   184 
   165 
   197     DMemSpyDriverOSAdaptionDThread& threadAdaption = OSAdaption().DThread();
   178     DMemSpyDriverOSAdaptionDThread& threadAdaption = OSAdaption().DThread();
   198     DMemSpyDriverOSAdaptionDProcess& processAdaption = OSAdaption().DProcess();
   179     DMemSpyDriverOSAdaptionDProcess& processAdaption = OSAdaption().DProcess();
   199 
   180 
   200 	NKern::ThreadEnterCS();
   181 	NKern::ThreadEnterCS();
   201 
   182 
   202     DObject* sessionHandle = (DObject*) aSessionHandle;
   183     DSession* session = (DSession*)CheckedOpen(EMemSpyDriverContainerTypeSession, (DObject*)aSessionHandle);
   203     sessionHandle = CheckIfObjectIsInContainer( EMemSpyDriverContainerTypeSession, sessionHandle );
   184     if (session == NULL )
   204     if  ( sessionHandle == NULL )
       
   205         {
   185         {
   206     	Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionInfo() - END - session not found");
   186     	Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionInfo() - END - session not found");
   207         NKern::ThreadLeaveCS();
   187         NKern::ThreadLeaveCS();
   208         return KErrNotFound;
   188         return KErrNotFound;
   209         }
   189         }
   210 
   190 
   211     DSession* session = (DSession*) sessionHandle;
       
   212     session->FullName( params.iName );
   191     session->FullName( params.iName );
   213 
   192 
   214     NKern::LockSystem();
   193     // Get owner type and id
   215     r = session->Open();
   194     DObject* sessionOwner = sessionAdaption.GetOwner( *session );
   216     if  ( r == KErrNone )
   195     if  ( sessionOwner )
   217         {
   196         {
   218         // Get owner type and id
   197         const TObjectType objectType = sessionAdaption.GetObjectType( *sessionOwner );
   219         DObject* sessionOwner = sessionAdaption.GetOwner( *session );
   198         if  ( objectType == EProcess )
   220         if  ( sessionOwner )
   199             {
   221             {
   200             DProcess* sessionProcess = (DProcess*) sessionOwner;
   222             const TObjectType objectType = sessionAdaption.GetObjectType( *sessionOwner );
   201             //
   223             if  ( objectType == EProcess )
   202             params.iOwnerId = processAdaption.GetId( *sessionProcess );
   224                 {
   203             params.iOwnerType = TMemSpyDriverServerSessionInfo::EOwnerProcess;
   225                 DProcess* sessionProcess = (DProcess*) sessionOwner;
   204             }
   226                 //
   205         else if ( objectType == EThread )
   227                 params.iOwnerId = processAdaption.GetId( *sessionProcess );
   206             {
   228                 params.iOwnerType = TMemSpyDriverServerSessionInfo::EOwnerProcess;
   207             DThread* sessionThread = (DThread*) sessionOwner;
   229                 }
   208             //
   230             else if ( objectType == EThread )
   209             params.iOwnerId = threadAdaption.GetId( *sessionThread );
   231                 {
   210             params.iOwnerType = TMemSpyDriverServerSessionInfo::EOwnerThread;
   232                 DThread* sessionThread = (DThread*) sessionOwner;
   211             }
   233                 //
       
   234                 params.iOwnerId = threadAdaption.GetId( *sessionThread );
       
   235                 params.iOwnerType = TMemSpyDriverServerSessionInfo::EOwnerThread;
       
   236                 }
       
   237             }
       
   238         else
       
   239             {
       
   240             params.iOwnerId = -1;
       
   241             params.iOwnerType = TMemSpyDriverServerSessionInfo::EOwnerNone;
       
   242             }
       
   243 
       
   244         // Other attributes
       
   245         params.iSessionType = sessionAdaption.GetSessionType( *session );
       
   246         params.iAddress = (TUint8*)session;
       
   247 
       
   248         NKern::ThreadEnterCS();
       
   249         TRACE( Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionInfo() - in CS..." ));
       
   250         //
       
   251 	    Kern::SafeClose( (DObject*&) session, NULL );
       
   252         TRACE( Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionInfo() - done safe close..." ));
       
   253         //
       
   254 	    NKern::ThreadLeaveCS();
       
   255         TRACE( Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionInfo() - left CS" ));
       
   256         }
   212         }
   257     else
   213     else
   258         {
   214         {
   259     	Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionInfo - error: %d opening server", r);
   215         params.iOwnerId = -1;
   260         }
   216         params.iOwnerType = TMemSpyDriverServerSessionInfo::EOwnerNone;
   261 
   217         }
   262     NKern::UnlockSystem();
   218 
   263 
   219     // Other attributes
   264     if  ( r == KErrNone )
   220     params.iSessionType = sessionAdaption.GetSessionType( *session );
   265         {
   221     params.iAddress = (TUint8*)session;
   266         r = Kern::ThreadRawWrite( &ClientThread(), aParams, &params, sizeof(TMemSpyDriverServerSessionInfo) );
   222 	session->Close(NULL);
   267         }
       
   268 
       
   269 	NKern::ThreadLeaveCS();
   223 	NKern::ThreadLeaveCS();
       
   224     r = Kern::ThreadRawWrite( &ClientThread(), aParams, &params, sizeof(TMemSpyDriverServerSessionInfo) );
   270 
   225 
   271 	TRACE( Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionInfo() - END - r: %d", r));
   226 	TRACE( Kern::Printf("DMemSpyDriverLogChanClientServer::GetServerSessionInfo() - END - r: %d", r));
   272 	return r;
   227 	return r;
   273     }
   228     }