Community technical support mailing list was retired 2010 and replaced with a professional technical support team. For assistance please contact: Pre-sales Technical support via email to sales@march-hare.com.
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