i écrivent les lecteurs et les écrivains où le noyau doivent synchroniser entre eux et écrivain de bloc qui lisent déjà un massagenoyau se pile au signal
quand je suis dans la file d'attente je reçois le signal si je fais la mise en jachère
while (i_Allready_Read(myf) == ALLREADY_READ || isExistWriter == false)
//while (!(i_Allready_Read(aliveProc,current->pid)))
{
int i, is_sig = 0;
printk(KERN_INFO "\n\n*****entered set in read ******\n\n");
if (i_Allready_Read(myf) == ALLREADY_READ)
wait_event_interruptible (readWaitQ1, !i_Allready_Read(myf));
else
wait_event_interruptible (readWaitQ1, isExistWriter);
//printk(KERN_INFO "Read Wakeup %d\n",current->pid);
for (i = 0; i < _NSIG_WORDS && !is_sig; i++)
{
is_sig = current->pending.signal.sig[i] & ~current->blocked.sig[i];
}
if (is_sig)
{
handledClose(myf);
module_put (THIS_MODULE);
return -EINTR;
}
}
return 0;//success
}
inline void handledClose(struct file *myf)//v
{ /* * si nous fermons l'écrivain autre écrivain * w ould pouvoir entrer à permissiones */
if (myf == writerpid)
{
isExistWriter = DOESNT_EXIST;
//printk(KERN_INFO "procfs_close : this is pid that just closed %d \n", writerpid);
}
/*
*else its a reader so our numofreaders
*need to decremented
*/
else
{
removeFromArr(myf);
numOfReaders--;
}
}
et ma proximité ne fait rien ...
qu'est-ce que je fait de mal?
ce code était apparemment apparemment sans raison, je peux comprendre qu'il a commencé à travailler :) – yoavstr