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(); |
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, ¶ms, sizeof(TMemSpyDriverServerSessionInfo) ); |
222 session->Close(NULL); |
267 } |
|
268 |
|
269 NKern::ThreadLeaveCS(); |
223 NKern::ThreadLeaveCS(); |
|
224 r = Kern::ThreadRawWrite( &ClientThread(), aParams, ¶ms, 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 } |