bug-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: update bug (was: adding on branch)


From: Paul Edwards
Subject: Re: update bug (was: adding on branch)
Date: Tue, 03 Jun 2003 13:46:42 GMT

"Paul Edwards" <kerravon@nosppaam.w3.to> wrote in message 
news:Rj_Ca.3600$7E.41598@news-server.bigpond.net.au...
> 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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]