{"action":"opened","issue":{"url":"https://api.github.com/repos/mozilla/rr/issues/1491","labels_url":"https://api.github.com/repos/mozilla/rr/issues/1491/labels{/name}","comments_url":"https://api.github.com/repos/mozilla/rr/issues/1491/comments","events_url":"https://api.github.com/repos/mozilla/rr/issues/1491/events","html_url":"https://github.com/mozilla/rr/issues/1491","id":79040607,"number":1491,"title":"ctrl-c doesn't interrupt a reverse-continue in replay","user":{"login":"pm215","id":1682716,"avatar_url":"https://avatars.githubusercontent.com/u/1682716?v=3","gravatar_id":"","url":"https://api.github.com/users/pm215","html_url":"https://github.com/pm215","followers_url":"https://api.github.com/users/pm215/followers","following_url":"https://api.github.com/users/pm215/following{/other_user}","gists_url":"https://api.github.com/users/pm215/gists{/gist_id}","starred_url":"https://api.github.com/users/pm215/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pm215/subscriptions","organizations_url":"https://api.github.com/users/pm215/orgs","repos_url":"https://api.github.com/users/pm215/repos","events_url":"https://api.github.com/users/pm215/events{/privacy}","received_events_url":"https://api.github.com/users/pm215/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-05-21T15:18:52Z","updated_at":"2015-05-21T15:18:52Z","closed_at":null,"body":"Consider this little test program:\r\n```\r\n#include <stdio.h>\r\n\r\nvoid foo(void) {\r\n}\r\n\r\nvoid bar(void) {\r\n}\r\n\r\nvoid busyloop(void) {\r\n    int i;\r\n    for (i = 0; i < 100000000000ULL; i++) {\r\n    }\r\n}\r\n\r\nint main(void) {\r\n    printf(\"In main\\n\");\r\n    foo();\r\n    busyloop();\r\n    bar();\r\n    printf(\"Out of main\\n\");\r\n    return 0;\r\n}\r\n```\r\n\r\nIf you record it, and then in the replay do:\r\n```\r\nbreak foo\r\nbreak bar\r\ncont      # will stop in foo\r\ncont\r\n```\r\nand then immediately hit ^C, execution will be interrupted somewhere in busyloop().\r\nIf you then do\r\n```\r\ncont    # will stop in bar\r\nrc\r\n```\r\nand then immediately hit ^C again, execution will not terminate until you get back to foo(), indicating that we aren't allowing ^C to interrupt a reverse-execute.\r\n\r\nThis is particularly unfortunate if you did a reverse-continue with a conditional breakpoint or watchpoint that gets hit-but-fails-condition a lot, because the reverse-continue might take an extremely long time to complete, and you basically have no choice but to abandon the whole debug session...\r\n"}}