Page 1 sur 1

Invalid memory acces ....

Publié : dim. 26/nov./2006 11:31
par scaraber
Hello
Je fait des test reseau et j'ai quelque probleme coter serveur et coter client ... Voici l'erreur retourner
[11:20:22] Waiting for executable to start...
[11:20:22] Executable started.
[11:23:53] [ERROR] Serveur.pb (Line: 382)
[11:23:53] [ERROR] Invalid memory access.
[11:23:54] [ERROR] Serveur.pb (Line: 383)
[11:23:54] [ERROR] Invalid memory access.
[11:23:54] The Program execution has finished.

Qui correspond a:
Delay(10)
Until EventID = #PB_Event_CloseWindow Or quit=1

J'ai cette erreur sur le Client et le serveur et sa interviens a intervale irregulier 1h, 2min, 40 min .... sa intervien quand on est au moins 2 de conecter....
Est ce que quelqu'un sais a quoi correspond cette erreur et a quoi elel correspond ...
merci d'avance
allez
a+
Scaraber

Publié : dim. 26/nov./2006 13:00
par Anonyme
thread ?

Publié : dim. 26/nov./2006 15:42
par scaraber
oui il ya des thread 3 dans le serv 4 dans le client

Publié : dim. 26/nov./2006 19:06
par Anonyme
c'est certainement un ReceiveNetworkData() qui te pose problème.
mais sans code , je ne peut pas t'en dire plus.
A mon avis tu dois alloué un buffer de reception qui n'est jamais vidé, d'ou le plantage.

Publié : dim. 26/nov./2006 19:52
par Flype
salut,

oui ca y ressemble.

il faut compiler avec l'option threadsafe si ce n'est pas déjà fait.

s'il y a toujours le problème il faut repérer quelles sont les ressouces (variables, buffers, strings, handles, ...) du code qui seraient sollicités par plusieurs threads en même temps. et s'employer avec les fonctions Mutex (commandes arrivées avec PB4 pour gérer plusieurs threads).

Publié : dim. 26/nov./2006 21:15
par scaraber
Salut
merci de vos reponce voici mon code de reception des donnée

Code : Tout sélectionner

      
      clientID = EventClient()
      *Buffer = AllocateMemory(4194304)
      ReceiveNetworkData(clientID, *Buffer, 4194304) 
      packet.s = PeekS(*Buffer,MemoryStringLength(*Buffer),#PB_Ascii) 
     //// Traitement du paquet
      FreeMemory(*Buffer) 

Comment lancer avec l'option ThreadSafe ?*va chercher mais au cas ou*
j'ai un tableau qui peute etre utiliser par un les 2 thread (reception/envoie) et par le programme principale lors de la deconexion d'un joueur (c'est possible car sa plante quand un joueur deconecte)
Chez le client sa bug defois quand un joueur se conecte ....
bon allez
a+
Scaraber

Publié : dim. 26/nov./2006 22:59
par Anonyme
Déjà , tu alloue ~4mo lors d'une reception de message, imagine que tu as 32 client connecter (128mo) et qui t'envois des infos en permanence...
Pour le threadsafe, c'est dans les options de compilation.
mais ca ne va pas régler ton problème, les exemples fournis avec purebasic sont faux , si tu t'appuis dessus , tu iras droit dans le mur. comme la dit flype, la solution est certainement les mutex.

Publié : dim. 26/nov./2006 23:50
par scaraber
les mutex
c'est quoi ces betes la? *va chercher*
tu alloue ~4mo lors d'une reception de message, imagine que tu as 32 client connecter (128mo)
Sa suffit pas 4 Mo? avec 1024 octel sa tournait a 3 personne *se pend*
++
scaraber

Publié : lun. 27/nov./2006 5:13
par poshu
Ne dépasse pas le Ko pour ton buffer, ca ne sert à rien d'avoir un truc immense (à moins que tes packets soit gros)

Mieux vaut éviter de partager les ressources entre les threads, puis ce que ca provoque des crash si c'est pas bien maitrisé et les mutex diminuent beaucoup l'interet du multithreading. Bref, essaye de mieux penser ton partage de ressource avant de te sentir obligé d'utiliser des semaphore/mutex.

Le threadsafe de la V4.00 n'est pas parfait (il a tendance à provoquer des bugs imprevisibles chez moi quand j'appelle une dll externe °_°), il semble que ca ait été corrigé dans la 4.01

Publié : lun. 27/nov./2006 8:30
par Anonyme
A mon avis 4mo n'est pas néssésaire du tout, surtout pour une p'tite appli.
fait le point sur se que tu envois, et adapte ton buffer en fonction.
Comme poshu l'a dit , evite de partager les ressources dans différent threads.

Publié : lun. 27/nov./2006 17:42
par scaraber
Ok merci je vais esayer de revoir mon code
a+
Scaraber