[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