On Mon, 10 Oct 2016, Nikolaus Rath wrote:
> On Oct 10 2016, Julia Lawall <[email protected]> wrote: > >> Ok, we're getting there. I've removed the second 'symbol' line, and > >> (permanently) updated to 1.0.6. However, now it seems to simply run > >> forever: > >> > >> $ ../coccinelle-1.0.6/spatch.opt --sp-file > >> ~/in-progress/libfuse/se-rename.cocci --in-place lib/ include/ test/ > >> example/ util/ > >> init_defs_builtins: /home/nikratio/tmp/coccinelle-1.0.6/standard.h > >> warning: patch output can only be created when only one > >> directory is specified or when the -patch flag is used > >> HANDLING: lib/fuse.c > >> (ONCE) Expected tokens fuse_session f > >> Skipping:lib/fuse_opt.c > >> HANDLING: lib/helper.c > >> Skipping:lib/mount_bsd.c > >> Skipping:lib/fuse_loop_mt.c > >> Skipping:lib/fuse_loop.c > >> HANDLING: lib/cuse_lowlevel.c > >> diff = > >> [...] > >> HANDLING: lib/fuse_lowlevel.c > >> > >> At this point it has been hanging for about 15 minutes now, steady > >> eating CPU time. > >> > >> Is it supposed to take that long? The fuse_lowlevel.c file is 74k with > >> 2465 lines of code. > > > > You can use --show-trying to see what function it is getting stuck on. If > > the function has a lot of ifs and loops, it may indeed take a long > > time. ... follows possible paths in the execution graph and a sequence of > > ifs makes the number of paths grow exponentially. > > > > A solution is to add a timeout, eg --timeout 120 (120 seconds). You will > > need to check a file on which there is a timeout manually. > > > > Tracing paths around loops is not really relevant in your case, so you can > > also safely use the option --no-loops, which will avoid taking the back > > edges. > > I tried doing both, but it still gets stuck: > > init_defs_builtins: /home/nikratio/tmp/coccinelle-1.0.6/standard.h > HANDLING: lib/fuse_lowlevel.c > ----------------------------------------------------------------------- > rule starting on line 1 = > ----------------------------------------------------------------------- > [...] > ----------------------------------------------------------------------- > rule starting on line 13 = > ----------------------------------------------------------------------- > [...] > trying function: do_init: fuse_lowlevel.c:1812 > > > The do_init() function doesn't seem all that terrible to me though: > https://github.com/libfuse/libfuse/blob/58273972f0b20/lib/fuse_lowlevel.c#L1812 Yes it does. Look at lines 1852-1877. There are 2^13 execution paths there, and there is another such stack of ifs later in the function. So you did add a timeout and it is still getting stuck? Try a very short timeout just to see what happens. julia _______________________________________________ Cocci mailing list [email protected] https://systeme.lip6.fr/mailman/listinfo/cocci
