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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [libjava/] [classpath/] [gnu/] [classpath/] [jdwp/] [processor/] [ThreadGroupReferenceCommandSet.java] - Blame information for rev 14

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 14 jlechner
/* 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
    ObjectId parentId = idMan.getObjectId(parent);
107
    parentId.write(os);
108
  }
109
 
110
  private void executeChildren(ByteBuffer bb, DataOutputStream os)
111
    throws JdwpException, IOException
112
  {
113
    ObjectId oid = idMan.readObjectId(bb);
114
    ThreadGroup group = (ThreadGroup) oid.getObject();
115
 
116
    ThreadGroup jdwpGroup = Thread.currentThread().getThreadGroup();
117
    int numThreads = group.activeCount();
118
    Thread allThreads[] = new Thread[numThreads];
119
 
120
    group.enumerate(allThreads, false);
121
 
122
    // We need to loop through for the true count since some threads may have
123
    // been destroyed since we got activeCount so those spots in the array will
124
    // be null. As well we must ignore any threads that belong to jdwp
125
    numThreads = 0;
126
    for (int i = 0; i < allThreads.length; i++)
127
      {
128
        Thread thread = allThreads[i];
129
        if (thread == null)
130
          break; // No threads after this point
131
        if (!thread.getThreadGroup().equals(jdwpGroup))
132
          numThreads++;
133
      }
134
 
135
    os.writeInt(numThreads);
136
 
137
    for (int i = 0; i < allThreads.length; i++)
138
      {
139
        Thread thread = allThreads[i];
140
        if (thread == null)
141
          break; // No threads after this point
142
        if (!thread.getThreadGroup().equals(jdwpGroup))
143
          idMan.getObjectId(thread).write(os);
144
      }
145
 
146
    int numGroups = group.activeCount();
147
    ThreadGroup allGroups[] = new ThreadGroup[numGroups];
148
 
149
    group.enumerate(allGroups, false);
150
 
151
    // We need to loop through for the true count since some ThreadGroups may
152
    // have been destroyed since we got activeCount so those spots in the array
153
    // will be null. As well we must ignore any threads that belong to jdwp.
154
    numGroups = 0;
155
    for (int i = 0; i < allGroups.length; i++)
156
      {
157
        ThreadGroup tgroup = allGroups[i];
158
        if (tgroup == null)
159
          break; // No ThreadGroups after this point
160
        if (!tgroup.equals(jdwpGroup))
161
          numGroups++;
162
      }
163
 
164
    os.writeInt(numGroups);
165
 
166
    for (int i = 0; i < allGroups.length; i++)
167
      {
168
        ThreadGroup tgroup = allGroups[i];
169
        if (tgroup == null)
170
          break; // No ThreadGroups after this point
171
        if (!tgroup.equals(jdwpGroup))
172
          idMan.getObjectId(tgroup).write(os);
173
      }
174
  }
175
}

powered by: WebSVN 2.1.0

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