I don't understand this part: Justus Winter, le Tue 30 Jul 2013 11:59:11 +0200, a écrit : > @@ -100,8 +100,17 @@ diskfs_S_dir_rename (struct protid *fromcred, > diskfs_nrele (fnp); > pthread_mutex_unlock (&renamedirlock); > if (!err) > - /* MiG won't do this for us, which it ought to. */ > - mach_port_deallocate (mach_task_self (), tocred->pi.port_right); > + { > + /* MiG won't do this for us, which it ought to. */ > + mach_port_deallocate (mach_task_self (), tocred->pi.port_right); > + > + /* Update fromcred->po->path for anyone who still has a > + reference to this node. */ > + free (fromcred->po->path); > + fromcred->po->path = strdup (tocred->po->path); > + if (! fromcred->po->path) > + return ENOMEM; > + } > return err; > } > > @@ -194,6 +203,13 @@ diskfs_S_dir_rename (struct protid *fromcred, > > /* We now hold no locks */ > > + /* Update fromcred->po->path for anyone who still has a reference to > + this node. */ > + free (fromcred->po->path); > + fromcred->po->path = strdup (tocred->po->path); > + if (! fromcred->po->path) > + return ENOMEM; > + > /* Now we remove the source. Unfortunately, we haven't held > fdp locked (nor could we), so someone else might have already > removed it. */
Why is this modifying fromcred? AIUI that is the directory originally containing the node to be renamed, so I don't see why its path should change. Samuel