freeipmi-devel
[Top][All Lists]
Advanced

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

Re: [Freeipmi-devel] Trouble w/ HP ProLiant and FreeIPMI (ipmi-sen


From: Gregor Dschung
Subject: Re: [Freeipmi-devel] Trouble w/ HP ProLiant and FreeIPMI (ipmi-sensors)
Date: Fri, 5 Oct 2007 10:52:06 +0200 (CEST)
User-agent: SquirrelMail/1.4.6

Hi Al,

sorry, I forgot to mention that I've used FreeIPMI 0.4.3.
Now, I've compiled the new 0.4.5 with the debug-flag. That's the whole
output:

-------------
p300slg01:/usr # ipmi-sensors -h gtseval-ipmi -u ADMIN -P --debug
Password:
RMCP Header:
------------
[               6h] = version[ 8b]
[               0h] = reserved[ 8b]
[              FFh] = sequence_number[ 8b]
[               7h] = message_class.class[ 5b]
[               0h] = message_class.reserved[ 2b]
[               0h] = message_class.ack[ 1b]
IPMI Session Header:
--------------------
[               0h] = authentication_type[ 8b]
[               0h] = session_sequence_number[32b]
[               0h] = session_id[32b]
IPMI Message Header:
--------------------
[              20h] = rs_addr[ 8b]
[               0h] = rs_lun[ 2b]
[               6h] = net_fn[ 6b]
[              C8h] = checksum1[ 8b]
[              81h] = rq_addr[ 8b]
[               0h] = rq_lun[ 2b]
[               0h] = rq_seq[ 6b]
IPMI Command Data:
------------------
[              38h] = cmd[ 8b]
[               Eh] = channel_number[ 4b]
[               0h] = reserved1[ 4b]
[               2h] = maximum_privilege_level[ 4b]
[               0h] = reserved2[ 4b]
RMCP Header:
------------
[               6h] = version[ 8b]
[               0h] = reserved[ 8b]
[              FFh] = sequence_number[ 8b]
[               7h] = message_class.class[ 5b]
[               0h] = message_class.reserved[ 2b]
[               0h] = message_class.ack[ 1b]
IPMI Session Header:
--------------------
[               0h] = authentication_type[ 8b]
[               0h] = session_sequence_number[32b]
[               0h] = session_id[32b]
[              10h] = ipmi_msg_len[ 8b]
IPMI Message Header:
--------------------
[              81h] = rq_addr[ 8b]
[               0h] = rq_lun[ 2b]
[               7h] = net_fn[ 6b]
[              63h] = checksum1[ 8b]
[              20h] = rs_addr[ 8b]
[               0h] = rs_lun[ 2b]
[               0h] = rq_seq[ 6b]
IPMI Command Data:
------------------
[              38h] = cmd[ 8b]
[               0h] = comp_code[ 8b]
[               2h] = channel_number[ 8b]
[               1h] = authentication_type.none[ 1b]
[               0h] = authentication_type.md2[ 1b]
[               1h] = authentication_type.md5[ 1b]
[               0h] = authentication_type.reserved1[ 1b]
[               1h] = authentication_type.straight_password_key[ 1b] [    
          0h] = authentication_type.oem_prop[ 1b]
[               0h] = authentication_type.reserved2[ 2b]
[               0h] = authentication_status.anonymous_login[ 1b]
[               0h] = authentication_status.null_username[ 1b]
[               1h] = authentication_status.non_null_username[ 1b] [      
        0h] = authentication_status.user_level_authentication[ 1b] [      
        0h] = authentication_status.per_message_authentication[ 1b] [     
         0h] = authentication_status.reserved[ 3b]
[               0h] = reserved1[ 8b]
[               0h] = oem_id[24b]
[               0h] = oem_auxiliary_data[ 8b]
IPMI Trailer:
--------------
[              8Dh] = checksum2[ 8b]
RMCP Header:
------------
[               6h] = version[ 8b]
[               0h] = reserved[ 8b]
[              FFh] = sequence_number[ 8b]
[               7h] = message_class.class[ 5b]
[               0h] = message_class.reserved[ 2b]
[               0h] = message_class.ack[ 1b]
IPMI Session Header:
--------------------
[               0h] = authentication_type[ 8b]
[               0h] = session_sequence_number[32b]
[               0h] = session_id[32b]
IPMI Message Header:
--------------------
[              20h] = rs_addr[ 8b]
[               0h] = rs_lun[ 2b]
[               6h] = net_fn[ 6b]
[              C8h] = checksum1[ 8b]
[              81h] = rq_addr[ 8b]
[               0h] = rq_lun[ 2b]
[               0h] = rq_seq[ 6b]
IPMI Command Data:
------------------
[              39h] = cmd[ 8b]
[               2h] = authentication_type[ 4b]
[               0h] = reserved[ 4b]
[  BYTE ARRAY ... ] = user_name[16B]
[ 41h 44h 4Dh 49h 4Eh 00h 00h 00h ]
[ 00h 00h 00h 00h 00h 00h 00h 00h ]
RMCP Header:
------------
[               6h] = version[ 8b]
[               0h] = reserved[ 8b]
[              FFh] = sequence_number[ 8b]
[               7h] = message_class.class[ 5b]
[               0h] = message_class.reserved[ 2b]
[               0h] = message_class.ack[ 1b]
IPMI Session Header:
--------------------
[               0h] = authentication_type[ 8b]
[               0h] = session_sequence_number[32b]
[               0h] = session_id[32b]
[              1Ch] = ipmi_msg_len[ 8b]
IPMI Message Header:
--------------------
[              81h] = rq_addr[ 8b]
[               0h] = rq_lun[ 2b]
[               7h] = net_fn[ 6b]
[              63h] = checksum1[ 8b]
[              20h] = rs_addr[ 8b]
[               0h] = rs_lun[ 2b]
[               0h] = rq_seq[ 6b]
IPMI Command Data:
------------------
[              39h] = cmd[ 8b]
[               0h] = comp_code[ 8b]
[         ED619F5h] = temp_session_id[32b]
[  BYTE ARRAY ... ] = challenge_string[16B]
[ DAh 1Bh C9h 77h 5Eh 70h 6Bh 1Ah ]
[ 36h 75h 33h 03h E9h 52h 48h 43h ]
IPMI Trailer:
--------------
[              86h] = checksum2[ 8b]
RMCP Header:
------------
[               6h] = version[ 8b]
[               0h] = reserved[ 8b]
[              FFh] = sequence_number[ 8b]
[               7h] = message_class.class[ 5b]
[               0h] = message_class.reserved[ 2b]
[               0h] = message_class.ack[ 1b]
IPMI Session Header:
--------------------
[               2h] = authentication_type[ 8b]
[               0h] = session_sequence_number[32b]
[         ED619F5h] = session_id[32b]
IPMI Message Header:
--------------------
[              20h] = rs_addr[ 8b]
[               0h] = rs_lun[ 2b]
[               6h] = net_fn[ 6b]
[              C8h] = checksum1[ 8b]
[              81h] = rq_addr[ 8b]
[               0h] = rq_lun[ 2b]
[               0h] = rq_seq[ 6b]
IPMI Command Data:
------------------
[              3Ah] = cmd[ 8b]
[               2h] = authentication_type[ 4b]
[               0h] = reserved1[ 4b]
[               2h] = maximum_privilege_level[ 4b]
[               0h] = reserved2[ 4b]
[  BYTE ARRAY ... ] = challenge_string[16B]
[ DAh 1Bh C9h 77h 5Eh 70h 6Bh 1Ah ]
[ 36h 75h 33h 03h E9h 52h 48h 43h ]
[        5E1FBADDh] = initial_outbound_sequence_number[32b]
RMCP Header:
------------
[               6h] = version[ 8b]
[               0h] = reserved[ 8b]
[              FFh] = sequence_number[ 8b]
[               7h] = message_class.class[ 5b]
[               0h] = message_class.reserved[ 2b]
[               0h] = message_class.ack[ 1b]
IPMI Session Header:
--------------------
[               2h] = authentication_type[ 8b]
[        5E1FBADDh] = session_sequence_number[32b]
[         ED619F5h] = session_id[32b]
[  BYTE ARRAY ... ] = authentication_code[16B]
[ FDh 94h 54h 89h AAh 47h 4Eh A7h ]
[ CEh AFh BBh 6Ch 2Ah ABh 7Ch 5Dh ]
[              12h] = ipmi_msg_len[ 8b]
IPMI Message Header:
--------------------
[              81h] = rq_addr[ 8b]
[               0h] = rq_lun[ 2b]
[               7h] = net_fn[ 6b]
[              63h] = checksum1[ 8b]
[              20h] = rs_addr[ 8b]
[               0h] = rs_lun[ 2b]
[               0h] = rq_seq[ 6b]
IPMI Command Data:
------------------
[              3Ah] = cmd[ 8b]
[               0h] = comp_code[ 8b]
[               2h] = authentication_type[ 4b]
[               0h] = reserved1[ 4b]
[         ED619F5h] = session_id[32b]
[               1h] = initial_inbound_sequence_number[32b]
[               2h] = maximum_privilege_level[ 4b]
[               0h] = reserved2[ 4b]
IPMI Trailer:
--------------
[              AFh] = checksum2[ 8b]
RMCP Header:
------------
[               6h] = version[ 8b]
[               0h] = reserved[ 8b]
[              FFh] = sequence_number[ 8b]
[               7h] = message_class.class[ 5b]
[               0h] = message_class.reserved[ 2b]
[               0h] = message_class.ack[ 1b]
IPMI Session Header:
--------------------
[               2h] = authentication_type[ 8b]
[               1h] = session_sequence_number[32b]
[         ED619F5h] = session_id[32b]
IPMI Message Header:
--------------------
[              20h] = rs_addr[ 8b]
[               0h] = rs_lun[ 2b]
[               6h] = net_fn[ 6b]
[              C8h] = checksum1[ 8b]
[              81h] = rq_addr[ 8b]
[               0h] = rq_lun[ 2b]
[               1h] = rq_seq[ 6b]
IPMI Command Data:
------------------
[              3Bh] = cmd[ 8b]
[               2h] = privilege_level[ 4b]
[               0h] = reserved1[ 4b]
RMCP Header:
------------
[               6h] = version[ 8b]
[               0h] = reserved[ 8b]
[              FFh] = sequence_number[ 8b]
[               7h] = message_class.class[ 5b]
[               0h] = message_class.reserved[ 2b]
[               0h] = message_class.ack[ 1b]
IPMI Session Header:
--------------------
[               2h] = authentication_type[ 8b]
[        5E1FBADEh] = session_sequence_number[32b]
[         ED619F5h] = session_id[32b]
[  BYTE ARRAY ... ] = authentication_code[16B]
[ C2h 8Eh E6h ABh 61h 31h 07h 2Dh ]
[ F2h CFh 35h 97h 7Ch DDh 0Ch 34h ]
[               9h] = ipmi_msg_len[ 8b]
IPMI Message Header:
--------------------
[              81h] = rq_addr[ 8b]
[               0h] = rq_lun[ 2b]
[               7h] = net_fn[ 6b]
[              63h] = checksum1[ 8b]
[              20h] = rs_addr[ 8b]
[               0h] = rs_lun[ 2b]
[               1h] = rq_seq[ 6b]
IPMI Command Data:
------------------
[              3Bh] = cmd[ 8b]
[               0h] = comp_code[ 8b]
[               2h] = privilege_level[ 4b]
[               0h] = reserved1[ 4b]
IPMI Trailer:
--------------
[              9Fh] = checksum2[ 8b]
RMCP Header:
------------
[               6h] = version[ 8b]
[               0h] = reserved[ 8b]
[              FFh] = sequence_number[ 8b]
[               7h] = message_class.class[ 5b]
[               0h] = message_class.reserved[ 2b]
[               0h] = message_class.ack[ 1b]
IPMI Session Header:
--------------------
[               2h] = authentication_type[ 8b]
[               2h] = session_sequence_number[32b]
[         ED619F5h] = session_id[32b]
IPMI Message Header:
--------------------
[              20h] = rs_addr[ 8b]
[               0h] = rs_lun[ 2b]
[               Ah] = net_fn[ 6b]
[              B8h] = checksum1[ 8b]
[              81h] = rq_addr[ 8b]
[               0h] = rq_lun[ 2b]
[               2h] = rq_seq[ 6b]
IPMI Command Data:
------------------
[              20h] = cmd[ 8b]
RMCP Header:
------------
[               6h] = version[ 8b]
[               0h] = reserved[ 8b]
[              FFh] = sequence_number[ 8b]
[               7h] = message_class.class[ 5b]
[               0h] = message_class.reserved[ 2b]
[               0h] = message_class.ack[ 1b]
IPMI Session Header:
--------------------
[               2h] = authentication_type[ 8b]
[        5E1FBADFh] = session_sequence_number[32b]
[         ED619F5h] = session_id[32b]
[  BYTE ARRAY ... ] = authentication_code[16B]
[ A5h 23h DBh 0Bh 77h BBh 41h 21h ]
[ 63h F1h 3Ch 48h CDh 8Eh EBh 36h ]
[              16h] = ipmi_msg_len[ 8b]
IPMI Message Header:
--------------------
[              81h] = rq_addr[ 8b]
[               0h] = rq_lun[ 2b]
[               Bh] = net_fn[ 6b]
[              53h] = checksum1[ 8b]
[              20h] = rs_addr[ 8b]
[               0h] = rs_lun[ 2b]
[               2h] = rq_seq[ 6b]
IPMI Command Data:
------------------
[              20h] = cmd[ 8b]
[               0h] = comp_code[ 8b]
[               1h] = sdr_version_major[ 4b]
[               5h] = sdr_version_minor[ 4b]
[              B7h] = record_count[16b]
[            13E0h] = free_space[16b]
[               6h] = most_recent_addition_timestamp[32b]
[               0h] = most_recent_erase_timestamp[32b]
[               1h] =
get_sdr_repository_allocation_info_command_supported[ 1b]
[               1h] = reserve_sdr_repository_command_supported[ 1b] [     
         1h] = partial_add_sdr_command_supported[ 1b]
[               1h] = delete_sdr_command_supported[ 1b]
[               0h] = reserved[ 1b]
[               1h] =
modal_non_modal_sdr_repository_update_operation_supported[ 2b]
[               0h] = overflow_flag[ 1b]
IPMI Trailer:
--------------
[              88h] = checksum2[ 8b]
*** glibc detected *** ipmi-sensors: free(): invalid pointer: 0x0807e698
*** ======= Backtrace: =========
/lib/libc.so.6[0xb7bf1911]
/lib/libc.so.6(__libc_free+0x84)[0xb7bf2f84]
ipmi-sensors[0x8056566]
ipmi-sensors[0x80566ad]
ipmi-sensors[0x804bae8]
ipmi-sensors[0x804bc7f]
ipmi-sensors[0x805dea5]
ipmi-sensors[0x804bda5]
/lib/libc.so.6(__libc_start_main+0xdc)[0xb7ba387c]
ipmi-sensors[0x804a4f1]
======= Memory map: ========
08048000-08073000 r-xp 00000000 08:04 902466    
/usr/local/sbin/ipmi-sensors 08073000-08074000 rw-p 0002b000 08:04 902466 
   /usr/local/sbin/ipmi-sensors 08074000-08096000 rw-p 08074000 00:00 0   
      [heap]
b7a00000-b7a21000 rw-p b7a00000 00:00 0
b7a21000-b7b00000 ---p b7a21000 00:00 0
b7b16000-b7b20000 r-xp 00000000 08:04 16403      /lib/libgcc_s.so.1
b7b20000-b7b21000 rw-p 00009000 08:04 16403      /lib/libgcc_s.so.1
b7b56000-b7b57000 rw-p b7b56000 00:00 0
b7b57000-b7b8c000 r--s 00000000 08:04 233346     /var/run/nscd/passwd
b7b8c000-b7b8e000 rw-p b7b8c000 00:00 0
b7b8e000-b7ca7000 r-xp 00000000 08:04 16361      /lib/libc-2.4.so
b7ca7000-b7ca9000 r--p 00118000 08:04 16361      /lib/libc-2.4.so
b7ca9000-b7cab000 rw-p 0011a000 08:04 16361      /lib/libc-2.4.so
b7cab000-b7cae000 rw-p b7cab000 00:00 0
b7cae000-b7cd1000 r-xp 00000000 08:04 16369      /lib/libm-2.4.so
b7cd1000-b7cd3000 rw-p 00022000 08:04 16369      /lib/libm-2.4.so
b7cd3000-b7ce4000 r-xp 00000000 08:04 16372      /lib/libnsl-2.4.so
b7ce4000-b7ce6000 rw-p 00010000 08:04 16372      /lib/libnsl-2.4.so
b7ce6000-b7ce8000 rw-p b7ce6000 00:00 0
b7ce8000-b7ceb000 r-xp 00000000 08:04 1619810
/usr/lib/libgpg-error.so.0.1.3
b7ceb000-b7cec000 rw-p 00002000 08:04 1619810
/usr/lib/libgpg-error.so.0.1.3
b7cec000-b7ced000 rw-p b7cec000 00:00 0
b7cec000-b7ced000 rw-p b7cec000 00:00 0
b7ced000-b7d3b000 r-xp 00000000 08:04 260935    
/usr/lib/libgcrypt.so.11.2.1 b7d3b000-b7d3d000 rw-p 0004d000 08:04 260935 
   /usr/lib/libgcrypt.so.11.2.1 b7d3d000-b7de7000 r-xp 00000000 08:04
490663
/usr/lib/libfreeipmi.so.4.0.0
b7de7000-b7ec1000 rw-p 000aa000 08:04 490663
/usr/lib/libfreeipmi.so.4.0.0
b7ec1000-b7ece000 r-xp 00000000 08:04 490693
/usr/lib/libipmidetect.so.0.0.0
b7ece000-b7ecf000 rw-p 0000c000 08:04 490693
/usr/lib/libipmidetect.so.0.0.0
b7ecf000-b7edf000 r-xp 00000000 08:04 16387      /lib/libpthread-2.4.so
b7edf000-b7ee1000 rw-p 0000f000 08:04 16387      /lib/libpthread-2.4.so
b7ee1000-b7ee3000 rw-p b7ee1000 00:00 0
b7ee3000-b7f18000 r--s 00000000 08:04 233536     /var/run/nscd/dbTnE5h2
(deleted)
b7f18000-b7f19000 rw-p b7f18000 00:00 0
b7f19000-b7f33000 r-xp 00000000 08:04 16354      /lib/ld-2.4.so
b7f33000-b7f35000 rw-p 00019000 08:04 16354      /lib/ld-2.4.so
bff94000-bffba000 rw-p bff94000 00:00 0          [stack]
ffffe000-fffff000 ---p 00000000 00:00 0          [vdso]
Aborted
p300slg01:/usr #
---------------

I hope, you can do something with this information :).

Regards && Thanks,
Gregor


> Hey Greg,
>
> Is this with FreeIPMI 0.4.X?  I'm not 100% sure of the issue skimming
code real quick.  Could you try with the debug rpms
> (ftp://ftp.zresearch.com/pub/freeipmi/0.4.5.debug/) and running with the
--debug option?  Or if you compiled yourself running ./configure with --
enable-debug?
>
> Thanks,
>
> Al
>
> On Thu, 2007-10-04 at 14:05 +0200, Gregor Dschung wrote:
>> Hi,
>>
>> I'm trying to read sensor-data with ipmi-sensors from an HP ProLiant
DL140G3, but everytime it crashes.
>>
>> Even if I read the data with ipmitool, I'll get warnings (I mailed this
issue already on the ipmitool mailing list).
>>
>> I'm not good in debugging such issues, so I hope you can help me.
>>
>> ---------
>> p300slg01:~/.freeipmi/sdr-cache # ipmi-sensors -h gtseval-ipmi -u ADMIN -P
>> Password:
>> *** glibc detected *** ipmi-sensors: free(): invalid pointer:
0x0806d680 ***
>> ======= Backtrace: =========
>> /lib/libc.so.6[0xb7c2e911]
>> /lib/libc.so.6(__libc_free+0x84)[0xb7c2ff84]
>> ipmi-sensors[0x805258a]
>> ipmi-sensors[0x805269f]
>> ipmi-sensors[0x804b394]
>> ipmi-sensors[0x804b4fb]
>> ipmi-sensors[0x8056b7f]
>> ipmi-sensors[0x804b606]
>> /lib/libc.so.6(__libc_start_main+0xdc)[0xb7be087c]
>> ipmi-sensors[0x804a561]
>> ======= Memory map: ========
>> 08048000-08062000 r-xp 00000000 08:04 40170      /usr/sbin/ipmi-sensors
08062000-08063000 rw-p 0001a000 08:04 40170      /usr/sbin/ipmi-sensors
08063000-08085000 rw-p 08063000 00:00 0          [heap]
>> b7a00000-b7a21000 rw-p b7a00000 00:00 0
>> b7a21000-b7b00000 ---p b7a21000 00:00 0
>> b7b3a000-b7b44000 r-xp 00000000 08:04 16403      /lib/libgcc_s.so.1
b7b44000-b7b45000 rw-p 00009000 08:04 16403      /lib/libgcc_s.so.1
b7b7a000-b7b7b000 rw-p b7b7a000 00:00 0
>> b7b7b000-b7bb0000 r--s 00000000 08:04 233346     /var/run/nscd/passwd
b7bb0000-b7bb2000 rw-p b7bb0000 00:00 0
>> b7bb2000-b7bc3000 r-xp 00000000 08:04 16372      /lib/libnsl-2.4.so
b7bc3000-b7bc5000 rw-p 00010000 08:04 16372      /lib/libnsl-2.4.so
b7bc5000-b7bc7000 rw-p b7bc5000 00:00 0
>> b7bc7000-b7bca000 r-xp 00000000 08:04 1619810
>> /usr/lib/libgpg-error.so.0.1.3
>> b7bca000-b7bcb000 rw-p 00002000 08:04 1619810
>> /usr/lib/libgpg-error.so.0.1.3
>> b7bcb000-b7ce4000 r-xp 00000000 08:04 16361      /lib/libc-2.4.so
b7ce4000-b7ce6000 r--p 00118000 08:04 16361      /lib/libc-2.4.so
b7ce6000-b7ce8000 rw-p 0011a000 08:04 16361      /lib/libc-2.4.so
b7ce8000-b7ceb000 rw-p b7ce8000 00:00 0
>> b7ceb000-b7d0e000 r-xp 00000000 08:04 16369      /lib/libm-2.4.so
b7d0e000-b7d10000 rw-p 00022000 08:04 16369      /lib/libm-2.4.so
b7d10000-b7d11000 rw-p b7d10000 00:00 0
>> b7d11000-b7d5f000 r-xp 00000000 08:04 260935
>> /usr/lib/libgcrypt.so.11.2.1
>> b7d5f000-b7d61000 rw-p 0004d000 08:04 260935
>> /usr/lib/libgcrypt.so.11.2.1
>> b7d61000-b7dd7000 r-xp 00000000 08:04 364978
>> /usr/lib/libfreeipmi.so.4.0.0
>> b7dd7000-b7eb1000 rw-p 00075000 08:04 364978
>> /usr/lib/libfreeipmi.so.4.0.0
>> b7eb1000-b7eb8000 r-xp 00000000 08:04 488969
>> /usr/lib/libipmidetect.so.0.0.0
>> b7eb8000-b7eb9000 rw-p 00007000 08:04 488969
>> /usr/lib/libipmidetect.so.0.0.0
>> b7eb9000-b7ec9000 r-xp 00000000 08:04 16387      /lib/libpthread-2.4.so
b7ec9000-b7ecb000 rw-p 0000f000 08:04 16387      /lib/libpthread-2.4.so
b7ecb000-b7ecd000 rw-p b7ecb000 00:00 0
>> b7ecd000-b7f02000 r--s 00000000 08:04 233536     /var/run/nscd/dbTnE5h2
(deleted)
>> b7f02000-b7f03000 rw-p b7f02000 00:00 0
>> b7f03000-b7f1d000 r-xp 00000000 08:04 16354      /lib/ld-2.4.so
b7f1d000-b7f1f000 rw-p 00019000 08:04 16354      /lib/ld-2.4.so
bf894000-bf8b7000 rw-p bf894000 00:00 0          [stack]
>> ffffe000-fffff000 ---p 00000000 00:00 0          [vdso]
>> Aborted
>> p300slg01:~/.freeipmi/sdr-cache #
>> -----------
>>
>> Even with the parameter -l ADMIN to force the privilege level to admin,
I'll getting the same output. With other servers (Supermicro) the tool
works fine.
>>
>> Regards,
>> Gregor
>>
> --
> Albert Chu
> address@hidden
> 925-422-5311
> Computer Scientist
> High Performance Systems Division
> Lawrence Livermore National Laboratory
>








reply via email to

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