Re: update bug (was: adding on branch)
"Paul Edwards" <[email protected]>
| Newsgroups | gmane.comp.version-control.cvs.bugs |
|---|---|
| Organization | BigPond Internet Services (http://www.bigpond.net.au) |
| Message-ID | <[email protected]> |
"Paul Edwards" <[email protected]> wrote in message news:[email protected]... > 1. Import being handled differently when branch exists. > 2. Merge not creating a conflict when branch exists. > 3. diff and rdiff -s not coping with different branches having > different version numbers while still being identical. > (hopefully 50% fixed on cvs1-11-x-branch). > 4. diff between two labels, first missing, second dead produces an > error instead of silence (hopefully fixed on cvs1-11-x-branch) > 5. diff and rdiff are not mirrors (feature request, not bug). One more. 6. multiple ctrl-c leaves locks. http://www.google.com.au/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&selm=M8Zsa.1222%24_o4.16754%40news-server.bigpond.net.au Here's a patch to cvs1-11-6 that might fix that. It just (hopefully) ignores further signals (code copied from the register) while the handler is under way, rather than having a more elaborate version that registers a new interim handler that prints out a message saying "I'm busy processing, please don't interrupt me". Testing something timing-dependent like this is not easy though. BFN. Paul. Index: sighandle.c =================================================================== RCS file: /cvs/ccvs/lib/sighandle.c,v retrieving revision 1.7 diff -c -r1.7 sighandle.c *** sighandle.c 23 Feb 2000 10:11:25 -0000 1.7 --- sighandle.c 3 Jun 2003 13:40:37 -0000 *************** *** 150,155 **** --- 150,175 ---- int sig; { struct SIG_hlist *this; + #ifdef POSIX_SIGNALS + struct sigaction act; + sigset_t sigset_mask, sigset_omask; + #else + #ifdef BSD_SIGNALS + struct sigvec vec; + int mask; + #endif + #endif + + /* Block this signal while we look at handler chain */ + #ifdef POSIX_SIGNALS + (void) sigemptyset(&sigset_mask); + (void) sigaddset(&sigset_mask, sig); + (void) sigprocmask(SIG_BLOCK, &sigset_mask, &sigset_omask); + #else + #ifdef BSD_SIGNALS + mask = sigblock(sigmask(sig)); + #endif + #endif /* Dispatch signal handlers */ this = SIG_handlers[sig]; *************** *** 158,163 **** --- 178,192 ---- (*this->handler)(sig); this = this->next; } + + /* Unblock the signal */ + #ifdef POSIX_SIGNALS + (void) sigprocmask(SIG_SETMASK, &sigset_omask, NULL); + #else + #ifdef BSD_SIGNALS + (void) sigsetmask(mask); + #endif + #endif return; } BFN. Paul.