OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [classpath/] [gnu/] [classpath/] [jdwp/] [processor/] [ThreadGroupReferenceCommandSet.java] - Blame information for rev 769

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 769 jeremybenn
/* ThreadGroupReferenceCommandSet.java -- class to implement the
2
   ThreadGroupReference Command Set
3
   Copyright (C) 2005 Free Software Foundation
4
 
5
This file is part of GNU Classpath.
6
 
7
GNU Classpath is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 2, or (at your option)
10
any later version.
11
 
12
GNU Classpath is distributed in the hope that it will be useful, but
13
WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
General Public License for more details.
16
 
17
You should have received a copy of the GNU General Public License
18
along with GNU Classpath; see the file COPYING.  If not, write to the
19
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20
02110-1301 USA.
21
 
22
Linking this library statically or dynamically with other modules is
23
making a combined work based on this library.  Thus, the terms and
24
conditions of the GNU General Public License cover the whole
25
combination.
26
 
27
As a special exception, the copyright holders of this library give you
28
permission to link this library with independent modules to produce an
29
executable, regardless of the license terms of these independent
30
modules, and to copy and distribute the resulting executable under
31
terms of your choice, provided that you also meet, for each linked
32
independent module, the terms and conditions of the license of that
33
module.  An independent module is a module which is not derived from
34
or based on this library.  If you modify this library, you may extend
35
this exception to your version of the library, but you are not
36
obligated to do so.  If you do not wish to do so, delete this
37
exception statement from your version. */
38
 
39
 
40
package gnu.classpath.jdwp.processor;
41
 
42
import gnu.classpath.jdwp.JdwpConstants;
43
import gnu.classpath.jdwp.exception.JdwpException;
44
import gnu.classpath.jdwp.exception.JdwpInternalErrorException;
45
import gnu.classpath.jdwp.exception.NotImplementedException;
46
import gnu.classpath.jdwp.id.ObjectId;
47
import gnu.classpath.jdwp.util.JdwpString;
48
 
49
import java.io.DataOutputStream;
50
import java.io.IOException;
51
import java.nio.ByteBuffer;
52
 
53
/**
54
 * A class representing the ThreadGroupReference Command Set.
55
 *
56
 * @author Aaron Luchko <aluchko@redhat.com>
57
 */
58
public class ThreadGroupReferenceCommandSet
59
  extends CommandSet
60
{
61
  public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
62
    throws JdwpException
63
  {
64
    try
65
      {
66
        switch (command)
67
          {
68
          case JdwpConstants.CommandSet.ThreadGroupReference.NAME:
69
            executeName(bb, os);
70
            break;
71
          case JdwpConstants.CommandSet.ThreadGroupReference.PARENT:
72
            executeParent(bb, os);
73
            break;
74
          case JdwpConstants.CommandSet.ThreadGroupReference.CHILDREN:
75
            executeChildren(bb, os);
76
            break;
77
          default:
78
            throw new NotImplementedException("Command " + command +
79
              " not found in ThreadGroupReference Command Set.");
80
          }
81
      }
82
    catch (IOException ex)
83
      {
84
        // The DataOutputStream we're using isn't talking to a socket at all
85
        // So if we throw an IOException we're in serious trouble
86
        throw new JdwpInternalErrorException(ex);
87
      }
88
 
89
    return false;
90
  }
91
 
92
  private void executeName(ByteBuffer bb, DataOutputStream os)
93
    throws JdwpException, IOException
94
  {
95
    ObjectId oid = idMan.readObjectId(bb);
96
    ThreadGroup group = (ThreadGroup) oid.getObject();
97
    JdwpString.writeString(os, group.getName());
98
  }
99
 
100
  private void executeParent(ByteBuffer bb, DataOutputStream os)
101
    throws JdwpException, IOException
102
  {
103
    ObjectId oid = idMan.readObjectId(bb);
104
    ThreadGroup group = (ThreadGroup) oid.getObject();
105
    ThreadGroup parent = group.getParent();
106
    if (parent == null) {
107
        os.writeLong(0L);
108
    } else {
109
        ObjectId parentId = idMan.getObjectId(parent);
110
        parentId.write(os);
111
    }
112
  }
113
 
114
  private void executeChildren(ByteBuffer bb, DataOutputStream os)
115
    throws JdwpException, IOException
116
  {
117
    ObjectId oid = idMan.readObjectId(bb);
118
    ThreadGroup group = (ThreadGroup) oid.getObject();
119
 
120
    ThreadGroup jdwpGroup = Thread.currentThread().getThreadGroup();
121
    int numThreads = group.activeCount();
122
    Thread allThreads[] = new Thread[numThreads];
123
 
124
    group.enumerate(allThreads, false);
125
 
126
    // We need to loop through for the true count since some threads may have
127
    // been destroyed since we got activeCount so those spots in the array will
128
    // be null. As well we must ignore any threads that belong to jdwp
129
    numThreads = 0;
130
    for (int i = 0; i < allThreads.length; i++)
131
      {
132
        Thread thread = allThreads[i];
133
        if (thread == null)
134
          break; // No threads after this point
135
        if (!thread.getThreadGroup().equals(jdwpGroup))
136
          numThreads++;
137
      }
138
 
139
    os.writeInt(numThreads);
140
 
141
    for (int i = 0; i < allThreads.length; i++)
142
      {
143
        Thread thread = allThreads[i];
144
        if (thread == null)
145
          break; // No threads after this point
146
        if (!thread.getThreadGroup().equals(jdwpGroup))
147
          idMan.getObjectId(thread).write(os);
148
      }
149
 
150
    int numGroups = group.activeCount();
151
    ThreadGroup allGroups[] = new ThreadGroup[numGroups];
152
 
153
    group.enumerate(allGroups, false);
154
 
155
    // We need to loop through for the true count since some ThreadGroups may
156
    // have been destroyed since we got activeCount so those spots in the array
157
    // will be null. As well we must ignore any threads that belong to jdwp.
158
    numGroups = 0;
159
    for (int i = 0; i < allGroups.length; i++)
160
      {
161
        ThreadGroup tgroup = allGroups[i];
162
        if (tgroup == null)
163
          break; // No ThreadGroups after this point
164
        if (!tgroup.equals(jdwpGroup))
165
          numGroups++;
166
      }
167
 
168
    os.writeInt(numGroups);
169
 
170
    for (int i = 0; i < allGroups.length; i++)
171
      {
172
        ThreadGroup tgroup = allGroups[i];
173
        if (tgroup == null)
174
          break; // No ThreadGroups after this point
175
        if (!tgroup.equals(jdwpGroup))
176
          idMan.getObjectId(tgroup).write(os);
177
      }
178
  }
179
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.