Invalid memory acces ....

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Invalid memory acces ....

Message 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
Anonyme

Message par Anonyme »

thread ?
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

oui il ya des thread 3 dans le serv 4 dans le client
Anonyme

Message 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.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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).
Image
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message 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
Anonyme

Message 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.
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message 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
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message 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
Anonyme

Message 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.
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message par scaraber »

Ok merci je vais esayer de revoir mon code
a+
Scaraber
Répondre