173 _arg[i][0] = '\0'; 174 } else { 175 assert(strlen(arg) <= arg_length_max, "exceeds maximum argument length"); 176 size_t len = MIN2(strlen(arg), (size_t)arg_length_max); 177 memcpy(_arg[i], arg, len); 178 _arg[i][len] = '\0'; 179 } 180 } 181 182 // create an operation of a given name 183 AttachOperation(const char* name) { 184 set_name(name); 185 for (int i=0; i<arg_count_max; i++) { 186 set_arg(i, NULL); 187 } 188 } 189 190 // complete operation by sending result code and any result data to the client 191 virtual void complete(jint result, bufferedStream* result_stream) = 0; 192 }; 193 #endif // INCLUDE_SERVICES 194 195 #endif // SHARE_SERVICES_ATTACHLISTENER_HPP | 173 _arg[i][0] = '\0'; 174 } else { 175 assert(strlen(arg) <= arg_length_max, "exceeds maximum argument length"); 176 size_t len = MIN2(strlen(arg), (size_t)arg_length_max); 177 memcpy(_arg[i], arg, len); 178 _arg[i][len] = '\0'; 179 } 180 } 181 182 // create an operation of a given name 183 AttachOperation(const char* name) { 184 set_name(name); 185 for (int i=0; i<arg_count_max; i++) { 186 set_arg(i, NULL); 187 } 188 } 189 190 // complete operation by sending result code and any result data to the client 191 virtual void complete(jint result, bufferedStream* result_stream) = 0; 192 }; 193 194 // Base Class for arguments parsing. 195 class CommandArgs : public CHeapObj<mtInternal> { 196 }; 197 198 // Arguments of HeapInspect. 199 struct HeapInspectArgs : public CommandArgs { 200 bool _live_object_only; 201 size_t _parallel_thread_num; 202 fileStream* _fs; 203 char* _path; 204 205 HeapInspectArgs() : _live_object_only(false), 206 _parallel_thread_num(0), 207 _fs(NULL), 208 _path(NULL) { } 209 ~HeapInspectArgs() { 210 if (_path != NULL) { 211 FREE_C_HEAP_ARRAY(char, _path); 212 _path = NULL; 213 } 214 215 if (_fs != NULL) { 216 delete _fs; 217 _fs = NULL; 218 } 219 } 220 }; 221 222 #endif // INCLUDE_SERVICES 223 224 #endif // SHARE_SERVICES_ATTACHLISTENER_HPP |