[twsocket] Access Violation at Address 00000 - When Client App terminates

2008-02-06 Thread wayne forrest
I have an Access Violation at address 0, I googled on this and found
that this means a reference to a null.

Basically I have implemented my Application based on ThrdSrvV2_1 demo
project,

The problem happens as Follows: The Client connects to the Server, then
requests data,
I then Close the Client Application (Terminate / end task).

the server then runs into this Routine: I am not sure where the Error is
precisely, I think it is when the Windows Message gets processed.
inside the Forms unit of delphi.

Any Ideas.

{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*}
{ We have to attach client socket to this thread's context and then
}
{ process messages so that TWSocket events works.
}
procedure TClientThread.Execute;
begin
if not Assigned(WSocket) then
Exit;

{ Attach client socket to this thread
}
WSocket.ThreadAttach;
{ Signal main thread that we've attached socket to this thread
}
ThreadAttached := TRUE;
{ Now let main thread continue starting the connection.
}
{ This little avoid race condition.
}
Sleep(0);
{ Let's block on critical section already owned by main thread
}
EnterCriticalSection(FCritSect);
LeaveCriticalSection(FCritSect);
{ Then process messages until WM_QUIT message is posted.
}
{ TWSocket is event-driven. So even when used within a thread, we
}
{ have to have a message pump. Any message pump will do and there
}
{ is one built in TWSocket, so use it !
}
WSocket.MessageLoop;
{ Be sure to have main thread waiting for termination before
terminating}
Sleep(0);
{ Detach the hidden window from within the thread
}
WSocket.ThreadDetach;
end;
-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Access Violation at Address 00000 - When Client App terminates

2008-02-06 Thread Wilfried Mestdagh
Hello wayne,

Yes you probably access an object that never has created, or there is
some pointer overwritten. When you have the exception view the call
stack window to go to the offending code.

---
Rgds, Wilfried [TeamICS]
http://www.overbyte.be/eng/overbyte/teamics.html
http://www.mestdagh.biz

Wednesday, February 6, 2008, 09:32, wayne forrest wrote:

 I have an Access Violation at address 0, I googled on this and found
 that this means a reference to a null.

 Basically I have implemented my Application based on ThrdSrvV2_1 demo
 project,

 The problem happens as Follows: The Client connects to the Server, then
 requests data,
 I then Close the Client Application (Terminate / end task).

 the server then runs into this Routine: I am not sure where the Error is
 precisely, I think it is when the Windows Message gets processed.
 inside the Forms unit of delphi.

 Any Ideas.

 {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *}
 { We have to attach client socket to this thread's context and then
 }
 { process messages so that TWSocket events works.
 }
 procedure TClientThread.Execute;
 begin
 if not Assigned(WSocket) then
 Exit;

 { Attach client socket to this thread
 }
 WSocket.ThreadAttach;
 { Signal main thread that we've attached socket to this thread
 }
 ThreadAttached := TRUE;
 { Now let main thread continue starting the connection.
 }
 { This little avoid race condition.
 }
 Sleep(0);
 { Let's block on critical section already owned by main thread
 }
 EnterCriticalSection(FCritSect);
 LeaveCriticalSection(FCritSect);
 { Then process messages until WM_QUIT message is posted.
 }
 { TWSocket is event-driven. So even when used within a thread, we
 }
 { have to have a message pump. Any message pump will do and there
 }
 { is one built in TWSocket, so use it !
 }
 WSocket.MessageLoop;
 { Be sure to have main thread waiting for termination before
 terminating}
 Sleep(0);
 { Detach the hidden window from within the thread
 }
 WSocket.ThreadDetach;
 end;

-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Access Violation at Address 00000 - When Client App terminates

2008-02-06 Thread wayne forrest
Thank you Wilfried,

I think I have found the Problem, but still not sure what to Check for,

I did a Stack Trace:

First event is 10053 : Socket Disconnected, then because I was sending Data,

this code then continues to be executed:

size := Swap4(DataStream.Size);
aThread.Send(@size, len);
aThread.Send(@b[0],DataStream.Size);
if aThread.ClientThread.ThreadAttached then //
has no Effect to catch Access Violation
aThread.TryToSend;

Is there a Way that I can Detect the LastError Code for the Current Thread:

as in

if  aThread.ErrorFree then begin
  // do my send operations.
end;


Thank you.

On Feb 6, 2008 11:09 AM, Wilfried Mestdagh [EMAIL PROTECTED] wrote:

 Hello wayne,

 Yes you probably access an object that never has created, or there is
 some pointer overwritten. When you have the exception view the call
 stack window to go to the offending code.

 ---
 Rgds, Wilfried [TeamICS]
 http://www.overbyte.be/eng/overbyte/teamics.html
 http://www.mestdagh.biz

 Wednesday, February 6, 2008, 09:32, wayne forrest wrote:

  I have an Access Violation at address 0, I googled on this and found
  that this means a reference to a null.

  Basically I have implemented my Application based on ThrdSrvV2_1 demo
  project,

  The problem happens as Follows: The Client connects to the Server, then
  requests data,
  I then Close the Client Application (Terminate / end task).

  the server then runs into this Routine: I am not sure where the Error is
  precisely, I think it is when the Windows Message gets processed.
  inside the Forms unit of delphi.

  Any Ideas.

  {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
  *}
  { We have to attach client socket to this thread's context and then
  }
  { process messages so that TWSocket events works.
  }
  procedure TClientThread.Execute;
  begin
  if not Assigned(WSocket) then
  Exit;

  { Attach client socket to this thread
  }
  WSocket.ThreadAttach;
  { Signal main thread that we've attached socket to this thread
  }
  ThreadAttached := TRUE;
  { Now let main thread continue starting the connection.
  }
  { This little avoid race condition.
  }
  Sleep(0);
  { Let's block on critical section already owned by main thread
  }
  EnterCriticalSection(FCritSect);
  LeaveCriticalSection(FCritSect);
  { Then process messages until WM_QUIT message is posted.
  }
  { TWSocket is event-driven. So even when used within a thread, we
  }
  { have to have a message pump. Any message pump will do and there
  }
  { is one built in TWSocket, so use it !
  }
  WSocket.MessageLoop;
  { Be sure to have main thread waiting for termination before
  terminating}
  Sleep(0);
  { Detach the hidden window from within the thread
  }
  WSocket.ThreadDetach;
  end;

 --
 To unsubscribe or change your settings for TWSocket mailing list
 please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
 Visit our website at http://www.overbyte.be




-- 
C: 076 337 4368
T: 021 880 2037
F: 021 880 2530
-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Access Violation at Address 00000 - When Client App terminates

2008-02-06 Thread Wilfried Mestdagh
Hello wayne,

if your socket is attached to a thread and multithread is true then all
events will fire in the same thread context. after OnSessionClosed is
fired (with or without error) you should not send data after it.

I think it is also a good idea to put all send operations in an
exception block just in case something happens.

---
Rgds, Wilfried [TeamICS]
http://www.overbyte.be/eng/overbyte/teamics.html
http://www.mestdagh.biz

Wednesday, February 6, 2008, 11:10, wayne forrest wrote:

 Thank you Wilfried,

 I think I have found the Problem, but still not sure what to Check for,

 I did a Stack Trace:

 First event is 10053 : Socket Disconnected, then because I was sending Data,

 this code then continues to be executed:

 size := Swap4(DataStream.Size);
 aThread.Send(@size, len);
 aThread.Send(@b[0],DataStream.Size);
 if aThread.ClientThread.ThreadAttached then //
 has no Effect to catch Access Violation
 aThread.TryToSend;

 Is there a Way that I can Detect the LastError Code for the Current Thread:

 as in

 if  aThread.ErrorFree then begin
   // do my send operations.
 end;


 Thank you.

 On Feb 6, 2008 11:09 AM, Wilfried Mestdagh [EMAIL PROTECTED] wrote:

 Hello wayne,

 Yes you probably access an object that never has created, or there is
 some pointer overwritten. When you have the exception view the call
 stack window to go to the offending code.

 ---
 Rgds, Wilfried [TeamICS]
 http://www.overbyte.be/eng/overbyte/teamics.html
 http://www.mestdagh.biz

 Wednesday, February 6, 2008, 09:32, wayne forrest wrote:

  I have an Access Violation at address 0, I googled on this and found
  that this means a reference to a null.

  Basically I have implemented my Application based on ThrdSrvV2_1 demo
  project,

  The problem happens as Follows: The Client connects to the Server, then
  requests data,
  I then Close the Client Application (Terminate / end task).

  the server then runs into this Routine: I am not sure where the Error is
  precisely, I think it is when the Windows Message gets processed.
  inside the Forms unit of delphi.

  Any Ideas.

  {* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
  *}
  { We have to attach client socket to this thread's context and then
  }
  { process messages so that TWSocket events works.
  }
  procedure TClientThread.Execute;
  begin
  if not Assigned(WSocket) then
  Exit;

  { Attach client socket to this thread
  }
  WSocket.ThreadAttach;
  { Signal main thread that we've attached socket to this thread
  }
  ThreadAttached := TRUE;
  { Now let main thread continue starting the connection.
  }
  { This little avoid race condition.
  }
  Sleep(0);
  { Let's block on critical section already owned by main thread
  }
  EnterCriticalSection(FCritSect);
  LeaveCriticalSection(FCritSect);
  { Then process messages until WM_QUIT message is posted.
  }
  { TWSocket is event-driven. So even when used within a thread, we
  }
  { have to have a message pump. Any message pump will do and there
  }
  { is one built in TWSocket, so use it !
  }
  WSocket.MessageLoop;
  { Be sure to have main thread waiting for termination before
  terminating}
  Sleep(0);
  { Detach the hidden window from within the thread
  }
  WSocket.ThreadDetach;
  end;

 --
 To unsubscribe or change your settings for TWSocket mailing list
 please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
 Visit our website at http://www.overbyte.be




 -- 
 C: 076 337 4368
 T: 021 880 2037
 F: 021 880 2530

-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be