(linenum→info "unix/slp.c:2238")

glibc/2.7/nptl_db/td_thr_clear_event.c

    1: /* Disable specific event for thread.
    2:    Copyright (C) 1999,2001,2002,2003 Free Software Foundation, Inc.
    3:    This file is part of the GNU C Library.
    4:    Contributed by Ulrich Drepper <drepper@redhat.com>, 1999.
    5: 
    6:    The GNU C Library is free software; you can redistribute it and/or
    7:    modify it under the terms of the GNU Lesser General Public
    8:    License as published by the Free Software Foundation; either
    9:    version 2.1 of the License, or (at your option) any later version.
   10: 
   11:    The GNU C Library is distributed in the hope that it will be useful,
   12:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   13:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   14:    Lesser General Public License for more details.
   15: 
   16:    You should have received a copy of the GNU Lesser General Public
   17:    License along with the GNU C Library; if not, write to the Free
   18:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   19:    02111-1307 USA.  */
   20: 
   21: #include <stddef.h>
   22: 
   23: #include "thread_dbP.h"
   24: 
   25: 
   26: td_err_e
   27: td_thr_clear_event (th, event)
   28:      const td_thrhandle_t *th;
   29:      td_thr_events_t *event;
   30: {
   31:   td_err_e err;
   32:   psaddr_t eventmask;
   33:   void *copy;
   34: 
   35:   LOG ("td_thr_clear_event");
   36: 
   37:   /* Fetch the old event mask from the inferior and modify it in place.  */
   38:   err = DB_GET_FIELD_ADDRESS (eventmask, th->th_ta_p,
   39:                               th->th_unique, pthread, eventbuf_eventmask, 0);
   40:   if (err == TD_OK)
   41:     err = DB_GET_STRUCT (copy, th->th_ta_p, eventmask, td_thr_events_t);
   42:   if (err == TD_OK)
   43:     {
   44:       uint32_t idx;
   45:       for (idx = 0; idx < TD_EVENTSIZE; ++idx)
   46:         {
   47:           psaddr_t word;
   48:           uint32_t mask;
   49:           err = DB_GET_FIELD_LOCAL (word, th->th_ta_p, copy,
   50:                                     td_thr_events_t, event_bits, idx);
   51:           if (err != TD_OK)
   52:             break;
   53:           mask = (uintptr_t) word;
   54:           mask &= ~event->event_bits[idx];
   55:           word = (psaddr_t) (uintptr_t) mask;
   56:           err = DB_PUT_FIELD_LOCAL (th->th_ta_p, copy,
   57:                                     td_thr_events_t, event_bits, idx, word);
   58:           if (err != TD_OK)
   59:             break;
   60:         }
   61:       if (err == TD_NOAPLIC)
   62:         {
   63:           err = TD_OK;
   64:           while (idx < TD_EVENTSIZE)
   65:             if (event->event_bits[idx++] != 0)
   66:               {
   67:                 err = TD_NOEVENT;
   68:                 break;
   69:               }
   70:         }
   71:       if (err == TD_OK)
   72:         /* Now write it back to the inferior.  */
   73:         err = DB_PUT_STRUCT (th->th_ta_p, eventmask, td_thr_events_t, copy);
   74:     }
   75: 
   76:   return err;
   77: }
Syntax (Markdown)