[cvsnt] taginfo script reaches max number of pipes and exits + tag filename passing
Albe
abilene at tin.it
Tue Feb 22 22:57:57 GMT 2005
Hi,
i've been getting made for 1 month, by now, on 2 problems regarding the
file tagging and the taginfo file.
The first is that if i do a single or multiple chosen file tag, only the
module name is passed (like if i did an rtag of a module) and NOT the
filename. The second is much more complicated (to me). My cvsnt is a
2.0.58d version, which is the official stable one. My machine is a linux
redhat 9 with an official 2.6.10 kernel. The CVS repository is on a ext3
file system and it's 500 MB and 10000+ files big. To get to the point,
when i add a custom script to the taginfo file (even a trivial one), and
do a rtag of the entire repository (or also of a big directory) it
reaches the max pipes limit for the system and exits. The exact error
string returned is:
cvs [rtag aborted]: cannot create pipe: Too many open files
Since it's of fundamental importance to my company, i had to get hands
down on the source with the aid of a c programmer and understand why it
does so. The code it's quite difficult to my eyes, but we've managed to
get rid of both problems in this way: avoid the pipe processes, do
directly the required script via exec() and create a custom made
arguments string with the tagged filename added at the end of the module
path.
To be more specific, in src/tag.c, pretag_info() does the call to the
script found in the taginfo file, if there's one. It does so for every
file to tag, opening pipe with the run_popen() function found in
src/server.c. This function open three pipes for every operation
consuming soon the 1007 max pipes limit of my system. In fact it does
only 335 operations (1007/3) and then stops, issuing the above cited
error (as in run_popen failure condition). I've looked online a way to
raise the max pipes number in linux, but found nothing but setting
higher the max open files number via the ulimit command. Also this did
nothing, it still stopped at 1007 pipes. Not to get mad at the code,
we've simply excluded the pipe creation process, doing what we needed
elsewhere. But this is not the way it's meant to be done and i think it
should be fixed properly, since it's something done (the run_popen()
call) for EVERY operation related with a "info" file in the CVSROOT dir.
I hope to have been clear enough.
ANY help is appreciated.
Thanks in advance
Alberto
More information about the cvsnt
mailing list