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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.