Initialisation d'un module

Questions sur le développement d'Apache et de ses modules.

Modérateur : Modérateurs

Avatar de l’utilisateur
zibo3
Membre
Membre
Messages : 14
Inscription : lun. 18 juil. 2005, 16:19

Messagepar zibo3 » mar. 06 sept. 2005, 15:39

bonjour,

Nouveau problème avec mon module qui fonctionne très bien sauf que j'ai un petit problème, je ne comprends pas pourquoi apache quand il appelle la dll de mon module la charge 4 fois. Ce qui ne serait pas génant si je n'avais pas des variables à initialiser de façon unique mais apache lance 4 fois l'initialisation.

Que j'utilise les fonctions de DllMain ou bien la redirection des fonctions de apaches, j'ai le droit à 4 démarrage.

Quelqu'un a t il résolu ce problème ou a une solution à me proposer???

merci

steve

Avatar de l’utilisateur
Gandalf
Sorcier des forums
Sorcier des forums
Messages : 2528
Inscription : jeu. 04 déc. 2003, 22:58

Messagepar Gandalf » mer. 07 sept. 2005, 13:46

peut-être ce chargement est du au fait que le processus parent et le processus fils invoquent le module...

es-tu sûr de bien traiter le chargement de la dll (type d'appel de dllmain, process_attach, thread_attach,.... ) ?

sinon, utilise de la mémoire partagée pour que l'initialisation ne se passe qu'une fois...
Celui qui détruit quelque chose pour savoir ce que c'est, a quitté le chemin de la sagesse.

Avatar de l’utilisateur
zibo3
Membre
Membre
Messages : 14
Inscription : lun. 18 juil. 2005, 16:19

Messagepar zibo3 » ven. 16 sept. 2005, 10:40

Le probleme c'est que meme dans le DLL main on y passe plusieurs fois. C'est ca que je ne comprends pas.
Et d'aileur c'est koi cette histoire de memoire partagée pour que l'init ne se passe qu'une fois?

En plus, j'ai un autre probleme, je ne trouve pas de hook pour que Apache m'appelle qu dechargement du module et bien sur, on ne passe pas par DllMain ce que je ne comprends pas.

Avatar de l’utilisateur
zibo3
Membre
Membre
Messages : 14
Inscription : lun. 18 juil. 2005, 16:19

Messagepar zibo3 » ven. 16 sept. 2005, 10:43

Le pire c'est que en fait je ne passe meme pas par la fonction DLL Main et je ne sais pas pourquoi....

Avatar de l’utilisateur
xgarreau
Pilier de forum
Pilier de forum
Messages : 1747
Inscription : jeu. 08 juil. 2004, 9:41
Localisation : ZazouLand @ La Rochelle
Contact :

Messagepar xgarreau » mar. 20 sept. 2005, 10:58

Tu y passes 4 fois ou tu n'y passes pas ???

La dll main doit être appelé 4 fois effectivement. Un fois par process qui s'y attache, une fois par thread puis à la fin, une fois par thread qui s'en détache et une fois par process.

A noter que si un thread partage le handle avec d'autres, là, dllmain n'est pas appelé.

a+
ZazouMiniWebServer : votre serveur web PHP/MySQL/SQLite sur votre pc, cd ou clé usb
Image
http://www.zmws.com/

Avatar de l’utilisateur
zibo3
Membre
Membre
Messages : 14
Inscription : lun. 18 juil. 2005, 16:19

Messagepar zibo3 » mar. 20 sept. 2005, 11:09

En ce qu'il se passe, c'est qu'il a 2 processus qui s'attache à la DLL.
Mais avant de s'y attacher definitevement, chaque processus load et deload la dll . Apparement il n'y a qu'un seul des processus qui se sert de la DLL donc ca devrait aller, apache me fait juste faire des initialisations pour rien.

Mais j'aimerai bien comprendre pourquoi apache lance 2 executalbe apache.exe et quel interet de load et deloader une dll avant de la loader definitivement.


Revenir vers « Développement Apache »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité