Probably, you would need to fix these: patching file testcases/kernel/syscalls/open/open10.c Hunk #1 FAILED at 282. Hunk #2 FAILED at 311. Hunk #3 FAILED at 359. Hunk #4 FAILED at 389. Hunk #5 FAILED at 440. 5 out of 5 hunks FAILED -- saving rejects to file testcases/kernel/syscalls/open/open10.c.rej patching file testcases/kernel/syscalls/splice/splice02.c patch: **** malformed patch at line 229: Passed");
Regards-- Subrata (Refer to git://ltp.git.sourceforge.net/gitroot/ltp/ltp-dev) On Thu, 2010-07-01 at 17:35 +0530, Darshak Shah wrote: > Hi, > > While executing the ltp on an nfs root mounted system, I faced a problem > with some of the ltp test cases. These tests either did not close their > file descriptors or did no unmap the mmaped files. This results in a > failures while trying to clean up the temporary directory of the testcase. > > Here are the failures I see. > > [dars...@darsshah-tp mcp61_ppcnf-197001010022]$ grep TWARN > mcp61_ppcnf-197001010022.out |grep rmdir > open10 0 TWARN : rmdir(open10.testdir.A.19588) failed: > errno=???(39): Directory not empty > open10 0 TWARN : tst_rmdir(): > rmobj(/tmp/ltp-yYmhzAq5ao/ope6m8CUb) failed: > unlink(/tmp/ltp-yYmhzAq5ao/ope6m8CUb/open10.testdir.B.19588/.nfs000000000011ef45000004b0) > > failed; errno=16: Device or resource busy > ppoll01 0 TWARN : tst_rmdir(): > rmobj(/tmp/ltp-yYmhzAq5ao/ppo1xLQtp) failed: > unlink(/tmp/ltp-yYmhzAq5ao/ppo1xLQtp/.nfs000000000011ef4a000004b7) > failed; errno=16: Device or resource busy > splice02 0 TWARN : tst_rmdir(): > rmobj(/tmp/ltp-yYmhzAq5ao/splESzJrq) failed: > remove(/tmp/ltp-yYmhzAq5ao/splESzJrq) failed; errno=39: Directory not empty > utimes01 0 TWARN : tst_rmdir(): > rmobj(/tmp/ltp-yYmhzAq5ao/utia5lQ1w) failed: > unlink(/tmp/ltp-yYmhzAq5ao/utia5lQ1w/.nfs0000000000122f28000004ca) > failed; errno=16: Device or resource busy > diotest02 0 TWARN : tst_rmdir(): > rmobj(/tmp/ltp-yYmhzAq5ao/dioaaIAuQ) failed: > unlink(/tmp/ltp-yYmhzAq5ao/dioaaIAuQ/.nfs000000000011ef57000004d3) > failed; errno=16: Device or resource busy > diotest03 0 TWARN : tst_rmdir(): > rmobj(/tmp/ltp-yYmhzAq5ao/dioqfwc9n) failed: > unlink(/tmp/ltp-yYmhzAq5ao/dioqfwc9n/.nfs000000000011ef58000004d4) > failed; errno=16: Device or resource busy > diotest05 0 TWARN : tst_rmdir(): > rmobj(/tmp/ltp-yYmhzAq5ao/dioYf4Dai) failed: > unlink(/tmp/ltp-yYmhzAq5ao/dioYf4Dai/.nfs000000000011ef59000004d5) > failed; errno=16: Device or resource busy > diotest06 0 TWARN : tst_rmdir(): > rmobj(/tmp/ltp-yYmhzAq5ao/dioBzOOyB) failed: > unlink(/tmp/ltp-yYmhzAq5ao/dioBzOOyB/.nfs000000000011ef5a000004d8) > failed; errno=16: Device or resource busy > mmapstress01 0 TWARN : tst_rmdir(): > rmobj(/tmp/ltp-yYmhzAq5ao/mmaR0zAez) failed: > unlink(/tmp/ltp-yYmhzAq5ao/mmaR0zAez/.nfs000000000011ef6e000004f9) > failed; errno=16: Device or resource busy > mmapstress02 0 TWARN : tst_rmdir(): > rmobj(/tmp/ltp-yYmhzAq5ao/mmad84xcc) failed: > unlink(/tmp/ltp-yYmhzAq5ao/mmad84xcc/.nfs000000000011ef6f000004fa) > failed; errno=16: Device or resource busy > mmapstress05 0 TWARN : tst_rmdir(): > rmobj(/tmp/ltp-yYmhzAq5ao/mmaOrvt5a) failed: > unlink(/tmp/ltp-yYmhzAq5ao/mmaOrvt5a/.nfs000000000011ef70000004fc) > failed; errno=16: Device or resource busy > mmapstress10 0 TWARN : tst_rmdir(): > rmobj(/tmp/ltp-yYmhzAq5ao/mmaBRE9gi) failed: > unlink(/tmp/ltp-yYmhzAq5ao/mmaBRE9gi/.nfs000000000011ef71000004fe) > failed; errno=16: Device or resource busy > [dars...@darsshah-tp mcp61_ppcnf-197001010022]$ > > I have fixed all of the above tests with the following patch. > > Signed-off-by: Darshak P Shah<[email protected]> > > > Index: ltp-full-20091231/testcases/kernel/syscalls/open/open10.c > =================================================================== > --- ltp-full-20091231.orig/testcases/kernel/syscalls/open/open10.c > +++ ltp-full-20091231/testcases/kernel/syscalls/open/open10.c > @@ -282,6 +282,7 @@ int main(int ac, char *av[]) > tst_resm(TFAIL|TERRNO, "open(%s) failed", nosetgid_A); > local_flag = FAILED; > } > + close(ret); > > if ((ret = stat(nosetgid_A, &buf)) < 0) { > tst_resm(TFAIL|TERRNO, "stat(%s) failed", nosetgid_A); > @@ -310,6 +311,7 @@ int main(int ac, char *av[]) > tst_resm(TFAIL|TERRNO, "open(%s) failed", setgid_A); > local_flag = FAILED; > } > + close(ret); > > if ((ret = stat(setgid_A, &buf)) < 0) { > tst_resm(TFAIL|TERRNO, "stat(%s) failed", setgid_A); > @@ -357,6 +359,7 @@ int main(int ac, char *av[]) > tst_resm(TFAIL|TERRNO, "open(%s) failed", nosetgid_B); > local_flag = FAILED; > } > + close(ret); > > if ((ret = stat(nosetgid_B, &buf)) < 0) { > tst_resm(TFAIL|TERRNO, "stat(%s) failed", nosetgid_B); > @@ -386,6 +389,7 @@ int main(int ac, char *av[]) > tst_resm(TFAIL|TERRNO, "open(%s) failed", setgid_B); > local_flag = FAILED; > } > + close(ret); > > if ((ret = stat(setgid_B, &buf)) < 0) { > tst_resm(TFAIL|TERRNO, "stat(%s) failed", setgid_B); > @@ -436,6 +440,7 @@ int main(int ac, char *av[]) > tst_resm(TFAIL|TERRNO, "open(%s) failed", root_setgid_B); > local_flag = FAILED; > } > + close(ret); > > if ((ret = stat(root_setgid_B, &buf)) < 0) { > tst_resm(TFAIL|TERRNO, "stat(%s) failed", root_setgid_B); > Index: ltp-full-20091231/testcases/kernel/syscalls/splice/splice02.c > =================================================================== > --- ltp-full-20091231.orig/testcases/kernel/syscalls/splice/splice02.c > +++ ltp-full-20091231/testcases/kernel/syscalls/splice/splice02.c > @@ -148,6 +148,7 @@ int main(int ac, char **av) { > } else > if (TEST_RETURN == 0){ > tst_resm(TPASS, "splice() system call > Passed"); > + close(fd); > cleanup(); > tst_exit(); > } > Index: ltp-full-20091231/testcases/kernel/io/direct_io/diotest2.c > =================================================================== > --- ltp-full-20091231.orig/testcases/kernel/io/direct_io/diotest2.c > +++ ltp-full-20091231/testcases/kernel/io/direct_io/diotest2.c > @@ -275,6 +275,7 @@ static void setup(void) > if ((fd1 = open(filename, O_DIRECT, 0600)) < 0) { > tst_brkm(TCONF, cleanup, "O_DIRECT is not supported by this > filesystem. %s", strerror(errno)); > } > + close(fd1); > > } > > Index: ltp-full-20091231/testcases/kernel/io/direct_io/diotest3.c > =================================================================== > --- ltp-full-20091231.orig/testcases/kernel/io/direct_io/diotest3.c > +++ ltp-full-20091231/testcases/kernel/io/direct_io/diotest3.c > @@ -363,6 +363,7 @@ static void setup(void) > if ((fd1 = open(filename, O_DIRECT, 0600)) < 0) { > tst_brkm(TCONF, cleanup, "O_DIRECT is not supported by this > filesystem. %s", strerror(errno)); > } > + close(fd1); > } > > static void cleanup(void) > Index: ltp-full-20091231/testcases/kernel/io/direct_io/diotest5.c > =================================================================== > --- ltp-full-20091231.orig/testcases/kernel/io/direct_io/diotest5.c > +++ ltp-full-20091231/testcases/kernel/io/direct_io/diotest5.c > @@ -309,6 +309,7 @@ static void setup(void) > if ((fd1 = open(filename, O_DIRECT, 0600)) < 0) { > tst_brkm(TCONF, cleanup, "O_DIRECT is not supported by this > filesystem. %s", strerror(errno)); > } > + close(fd1); > } > > static void cleanup(void) > Index: ltp-full-20091231/testcases/kernel/io/direct_io/diotest6.c > =================================================================== > --- ltp-full-20091231.orig/testcases/kernel/io/direct_io/diotest6.c > +++ ltp-full-20091231/testcases/kernel/io/direct_io/diotest6.c > @@ -387,6 +387,7 @@ static void setup(void) > if ((fd1 = open(filename, O_DIRECT, 0600)) < 0) { > tst_brkm(TCONF, cleanup, "O_DIRECT is not supported by this > filesystem. %s", strerror(errno)); > } > + close(fd1); > } > > static void cleanup(void) > Index: ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress02.c > =================================================================== > --- ltp-full-20091231.orig/testcases/kernel/mem/mmapstress/mmapstress02.c > +++ ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress02.c > @@ -165,6 +165,10 @@ main(int argc, char *argv[]) { > CLEANERROR("close failed"); > anyfail(); > } > + if (munmap(mmapaddr, pagesize) == -1) { > + CLEANERROR("munmap failed"); > + anyfail(); > + } > if (unlink(tmpname) == -1) { > ERROR("unlink failed"); > anyfail(); > Index: ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress01.c > =================================================================== > --- ltp-full-20091231.orig/testcases/kernel/mem/mmapstress/mmapstress01.c > +++ ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress01.c > @@ -590,7 +590,11 @@ child_mapper(char *file, unsigned procno > anyfail(); > } > } > - > + if (munmap(maddr, mapsize) == -1) { > + perror("munmap failed"); > + local_flag = FAILED; > + anyfail(); > + } > exit(0); > } > > @@ -694,6 +698,7 @@ fileokay(char *file, uchar_t *expbuf) > } > } > } > + close(fd); > > return 1; > } > Index: ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress05.c > =================================================================== > --- ltp-full-20091231.orig/testcases/kernel/mem/mmapstress/mmapstress05.c > +++ ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress05.c > @@ -61,6 +61,15 @@ void ok_exit(); > #define ERROR(M) (void)fprintf(stderr, "%s: errno = %d; " M "\n", \ > progname, errno); > #define CLEAN (void)close(fd); \ > + if (munmap(mmapaddr+pagesize, pagesize) == -1) { \ > + ERROR("munmap failed"); \ > + } \ > + if (munmap(mmapaddr, pagesize) == -1) { \ > + ERROR("munmap failed"); \ > + } \ > + if (munmap(mmapaddr+2*pagesize, pagesize) == -1) { \ > + ERROR("munmap failed"); \ > + } \ > if (unlink(tmpname)) { \ > ERROR("couldn't clean up temp file"); \ > } > Index: ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress10.c > =================================================================== > --- ltp-full-20091231.orig/testcases/kernel/mem/mmapstress/mmapstress10.c > +++ ltp-full-20091231/testcases/kernel/mem/mmapstress/mmapstress10.c > @@ -154,6 +154,15 @@ unsigned do_offset = 0; > unsigned pattern = 0; > char filename[64]; > > +void clean_mapper(int sig); > +void clean_writer(int sig); > + > +int fd_mapper = 0; > +caddr_t maddr_mapper; > +size_t mapsize_mapper; > + > +int fd_writer = 0; > + > int > main(int argc, char *argv[]) > { > @@ -484,8 +493,8 @@ main(int argc, char *argv[]) > > cleanup: > for (i = 0; i < nprocs; i++) > - (void)kill(pidarray[i], SIGKILL); > - (void)kill(wr_pid, SIGKILL); > + (void)kill(pidarray[i], SIGUSR1); > + (void)kill(wr_pid, SIGUSR1); > > while (wait(&wait_stat) != -1 || errno != ECHILD) > continue; > @@ -531,9 +540,7 @@ child_mapper(char *file, unsigned procno > off_t offset; > #endif /* LARGE_FILE */ > size_t validsize; > - size_t mapsize; > - caddr_t maddr, paddr; > - int fd; > + caddr_t paddr; > int pagesize = sysconf(_SC_PAGE_SIZE); > unsigned randpage; > unsigned int seed; > @@ -542,25 +549,38 @@ child_mapper(char *file, unsigned procno > unsigned mappages; > unsigned mapflags; > unsigned i; > + struct sigaction sa_mapper; > > mapflags = MAP_SHARED; > > seed = initrand(); /* initialize random seed */ > > + sa_mapper.sa_handler = clean_mapper; > + sa_mapper.sa_flags = 0; > + if (sigemptyset(&sa_mapper.sa_mask)) { > + perror("sigempty error"); > + anyfail(); > + } > + > + if (sigaction(SIGUSR1, &sa_mapper, 0) == -1) { > + perror("sigaction error SIGUSR1"); > + anyfail(); > + } > + > > #ifdef LARGE_FILE > - if ((fd = open64(file, O_RDWR)) == -1) { > + if ((fd_mapper = open64(file, O_RDWR)) == -1) { > #else /* LARGE_FILE */ > - if ((fd = open(file, O_RDWR)) == -1) { > + if ((fd_mapper = open(file, O_RDWR)) == -1) { > #endif /* LARGE_FILE */ > perror("open error"); > anyfail(); > } > > #ifdef LARGE_FILE > - if (fstat64(fd, &statbuf) == -1) { > + if (fstat64(fd_mapper, &statbuf) == -1) { > #else /* LARGE_FILE */ > - if (fstat(fd, &statbuf) == -1) { > + if (fstat(fd_mapper, &statbuf) == -1) { > #endif /* LARGE_FILE */ > perror("stat error"); > anyfail(); > @@ -571,29 +591,29 @@ child_mapper(char *file, unsigned procno > fprintf(stderr, "size_t overflow when setting up map\n"); > anyfail(); > } > - mapsize = (size_t)(statbuf.st_size - sparseoffset); > - mappages = roundup(mapsize, pagesize) / pagesize; > + mapsize_mapper = (size_t)(statbuf.st_size - sparseoffset); > + mappages = roundup(mapsize_mapper, pagesize) / pagesize; > offset = sparseoffset; > if (do_offset) { > int pageoffset = lrand48() % mappages; > int byteoffset = pageoffset * pagesize; > offset += byteoffset; > - mapsize -= byteoffset; > + mapsize_mapper -= byteoffset; > mappages -= pageoffset; > } > > #ifdef LARGE_FILE > - if ((maddr = mmap64(0, mapsize, PROT_READ|PROT_WRITE, > - mapflags, fd, offset)) == (caddr_t)-1) { > + if ((maddr_mapper = mmap64(0, mapsize_mapper, PROT_READ|PROT_WRITE, > + mapflags, fd_mapper, offset)) == (caddr_t)-1) { > #else /* LARGE_FILE */ > - if ((maddr = mmap(0, mapsize, PROT_READ|PROT_WRITE, > - mapflags, fd, offset)) == (caddr_t)-1) { > + if ((maddr_mapper = mmap(0, mapsize_mapper, PROT_READ|PROT_WRITE, > + mapflags, fd_mapper, offset)) == (caddr_t)-1) { > #endif /* LARGE_FILE */ > perror("mmap error"); > anyfail(); > } > > - (void)close(fd); > + (void)close(fd_mapper); > > nloops = (randloops) ? (lrand48() % MAXLOOPS) : MAXLOOPS; > > @@ -601,12 +621,12 @@ child_mapper(char *file, unsigned procno > #ifdef LARGE_FILE > (void)printf("child %d (pid %ld): seed %d, fsize %Ld, " > "mapsize %d, off %Ld, loop %d\n", > - procno, getpid(), seed, filesize, mapsize, > + procno, getpid(), seed, filesize, mapsize_mapper, > offset/pagesize, nloops); > #else /* LARGE_FILE */ > (void)printf("child %d (pid %d): seed %d, fsize %ld, " > "mapsize %ld, off %ld, loop %d\n", > - procno, getpid(), seed, filesize, (long)mapsize, > + procno, getpid(), seed, filesize, (long)mapsize_mapper, > offset/pagesize, nloops); > #endif /* LARGE_FILE */ > } > @@ -616,13 +636,13 @@ child_mapper(char *file, unsigned procno > */ > for (loopcnt = 0; loopcnt < nloops; loopcnt++) { > randpage = lrand48() % mappages; > - paddr = maddr + (randpage * pagesize); /* page address */ > + paddr = maddr_mapper + (randpage * pagesize); /* page > address */ > > if (randpage < mappages - 1 > - || !(mapsize % pagesize)) > + || !(mapsize_mapper % pagesize)) > validsize = pagesize; > else > - validsize = mapsize % pagesize; > + validsize = mapsize_mapper % pagesize; > > /* > * Because one child is mapping file in extend mode, > @@ -652,14 +672,17 @@ child_mapper(char *file, unsigned procno > * Exercise msync() as well! > */ > randpage = lrand48() % mappages; > - paddr = maddr + (randpage * pagesize); /* page address */ > + paddr = maddr_mapper + (randpage * pagesize); /* page > address */ > if (msync(paddr, (mappages - randpage)*pagesize, > MS_SYNC) == -1) { > perror("msync error"); > anyfail(); > } > } > - > + if ( munmap(maddr_mapper,mapsize_mapper) == -1 ) { > + perror("munmap failed"); > + anyfail(); > + } > exit(0); > } > > @@ -675,7 +698,20 @@ child_mapper(char *file, unsigned procno > void > child_writer(char *file, uchar_t *buf) /* buf already set up in main */ > { > - int fd; > + struct sigaction sa_writer; > + > + sa_writer.sa_handler = clean_writer; > + sa_writer.sa_flags = 0; > + if (sigemptyset(&sa_writer.sa_mask)) { > + perror("sigempty error"); > + anyfail(); > + } > + > + if (sigaction(SIGUSR1, &sa_writer, 0) == -1) { > + perror("sigaction error SIGUSR1"); > + anyfail(); > + } > + > #ifdef LARGE_FILE > struct stat64 statbuf; > off64_t off; > @@ -688,18 +724,18 @@ child_writer(char *file, uchar_t *buf) / > int cnt; > > #ifdef LARGE_FILE > - if ((fd = open64(file, O_RDWR)) == -1) { > + if ((fd_writer = open64(file, O_RDWR)) == -1) { > #else /* LARGE_FILE */ > - if ((fd = open(file, O_RDWR)) == -1) { > + if ((fd_writer = open(file, O_RDWR)) == -1) { > #endif /* LARGE_FILE */ > perror("open error"); > anyfail(); > } > > #ifdef LARGE_FILE > - if ((off = lseek64(fd, 0, SEEK_END)) == -1) { > + if ((off = lseek64(fd_writer, 0, SEEK_END)) == -1) { > #else /* LARGE_FILE */ > - if ((off = lseek(fd, 0, SEEK_END)) == -1) { > + if ((off = lseek(fd_writer, 0, SEEK_END)) == -1) { > #endif /* LARGE_FILE */ > perror("lseek error"); > anyfail(); > @@ -708,9 +744,9 @@ child_writer(char *file, uchar_t *buf) / > > for (;;) { > #ifdef LARGE_FILE > - if (fstat64(fd, &statbuf) == -1) { > + if (fstat64(fd_writer, &statbuf) == -1) { > #else /* LARGE_FILE */ > - if (fstat(fd, &statbuf) == -1) { > + if (fstat(fd_writer, &statbuf) == -1) { > #endif /* LARGE_FILE */ > perror("fstat error"); > anyfail(); > @@ -734,7 +770,7 @@ child_writer(char *file, uchar_t *buf) / > > p = buf + (off % pagesize); > > - if ((cnt = write(fd, p, growsize)) != growsize) { > + if ((cnt = write(fd_writer, p, growsize)) != growsize) { > if (cnt == -1) > perror("write error"); > else > @@ -747,12 +783,13 @@ child_writer(char *file, uchar_t *buf) / > > (void)sleep(sleeptime); > if (dosync) { > - if (fsync(fd) == -1) { > + if (fsync(fd_writer) == -1) { > perror("fsync error"); > anyfail(); > } > } > } > + close(fd_writer); > } > > > @@ -814,6 +851,7 @@ fileokay(char *file, uchar_t *expbuf) > cnt = read(fd, (char *)readbuf, pagesize); > if (cnt == -1) { > perror("read error"); > + close(fd); > return 0; > } else if (cnt != pagesize) { > /* > @@ -822,6 +860,7 @@ fileokay(char *file, uchar_t *expbuf) > if ((i * pagesize) + cnt != mapsize) { > (void)fprintf(stderr, "read %d of %ld bytes\n", > (i*pagesize)+cnt, (long)mapsize); > + close(fd); > return 0; > } > } > @@ -841,6 +880,7 @@ fileokay(char *file, uchar_t *expbuf) > (void)fprintf(stderr, ", pg %d off %d, " > "(fsize %ld)\n", i, j, statbuf.st_size); > #endif /* LARGE_FILE */ > + close(fd); > return 0; > } > } > @@ -866,6 +906,21 @@ clean_up_file(int sig) > exit(1); > } > > +void clean_mapper(int sig) > +{ > + if (fd_mapper) > + close(fd_mapper); > + munmap(maddr_mapper,mapsize_mapper); > + exit (0); > +} > + > +void clean_writer(int sig) > +{ > + if (fd_writer) > + close(fd_writer); > + exit(0); > +} > + > unsigned int > initrand(void) > { > @@ -887,7 +942,6 @@ initrand(void) > return (seed); > } > > - > /***** LTP Port *****/ > void ok_exit() > { > Index: ltp-full-20091231/testcases/kernel/syscalls/ppoll/ppoll01.c > =================================================================== > --- ltp-full-20091231.orig/testcases/kernel/syscalls/ppoll/ppoll01.c > +++ ltp-full-20091231/testcases/kernel/syscalls/ppoll/ppoll01.c > @@ -378,8 +378,10 @@ static int do_test(struct test_case *tc) > } > result |= (sys_errno != tc->err) || !cmp_ok; > PRINT_RESULT_CMP(sys_ret >= 0, tc->ret, tc->err, sys_ret, > sys_errno, cmp_ok); > - cleanup: if (fd >= 0) > + cleanup: if (fd >= 0) { > + close(fd); > cleanup_file(fpath); > + } > > sigemptyset(&sigmask); > sigprocmask(SIG_SETMASK, &sigmask, NULL); > Index: ltp-full-20091231/testcases/kernel/syscalls/utimes/utimes01.c > =================================================================== > --- ltp-full-20091231.orig/testcases/kernel/syscalls/utimes/utimes01.c > +++ ltp-full-20091231/testcases/kernel/syscalls/utimes/utimes01.c > @@ -234,6 +234,8 @@ static int do_test(struct test_case *tc) > TEST(rc = setup_file(TESTDIR, "test.file", fpath)); > if (rc < 0) > return 1; > + /* The test just needs the file, so no need to keep it open. */ > + close(rc); > > /* > * Change effective user id > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by Sprint > What will you do first with EVO, the first 4G phone? > Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first > _______________________________________________ > Ltp-list mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/ltp-list ------------------------------------------------------------------------------ This SF.net email is sponsored by Sprint What will you do first with EVO, the first 4G phone? Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
