A webrev is here: http://cr.openjdk.java.net/~sla/8005278/webrev.00/
/Staffan On 21 jan 2013, at 05:00, David Holmes <david.hol...@oracle.com> wrote: > On 21/01/2013 1:06 PM, 云达 wrote: >> Actually I just changed "BinaryTreeDictionary" to "AFLBinaryTreeDictionary", >> since there is no definition of BinaryTreeDictionary in the latest hotspot: >> http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/file/b5f6465019f6/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp >> , which has been changed to AFLBinaryTreeDictionary. So the code in SA has >> to change too. The bug is already found here: >> http://bugs.sun.com/view_bug.do?bug_id=8005278 > > I'm still missing some pieces here. We have: > > typedef BinaryTreeDictionary<FreeChunk, AdaptiveFreeList> > AFLBinaryTreeDictionary; > > in vmStructs and we have: > > ./share/vm/memory/binaryTreeDictionary.hpp/cpp > > and we have: > > src/share/classes/sun/jvm/hotspot/memory/BinaryTreeDictionary.java > > So I'm unclear what is causing the problem here. > > Staffan: can you generate a webrev from this patch to make the context > clearer please? > > Thanks, > David > >> Regards, >> Yunda >> -----邮件原件----- >> 发件人: David Holmes [mailto:david.hol...@oracle.com] >> 发送时间: 2013年1月21日 10:45 >> 收件人: 云达 >> 抄送: Staffan Larsen; serviceability-dev@openjdk.java.net >> 主题: Re: 答复: Errors when use "universe" command in CLHSDB >> >> I couldn't quite understand the problem and fix from the patch. Why do we >> need to add AFLBinaryTreeDictionary ?? >> >> Thanks, >> David >> >> On 21/01/2013 12:03 PM, 云达 wrote: >>> Thanks for your review again. Could someone with Reviewer status help >>> me with this? Thanks in advance! >>> >>> Regards, >>> >>> Yunda >>> >>> *发件人:*Staffan Larsen [mailto:staffan.lar...@oracle.com] >>> *发送时间:*2013年1月18日20:14 >>> *收件人:*云达 >>> *抄送:*daniel.daughe...@oracle.com; serviceability-dev@openjdk.java.net >>> *主题:*Re: Errors when use "universe" command in CLHSDB >>> >>> This patch applied cleanly. >>> >>> I can sponsor this fix, but we still need a review from someone with >>> Reviewer status. Once we have that, I can push the change. >>> >>> Thanks, >>> >>> /Staffan >>> >>> On 18 jan 2013, at 11:22, 云达<yunda....@taobao.com >>> <mailto:yunda....@taobao.com>> wrote: >>> >>> >>> >>> OK. I diffed it with the >>> latesthttp://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/and I hope it >>> works. Thanks for the review! >>> >>> Regards, >>> >>> Yunda >>> >>> *发件人:*Staffan Larsen [mailto:staffan.lar...@oracle.com >>> <http://oracle.com>] >>> *发送时间:*2013年1月18日17:07 >>> *收件人:*云达 >>> *抄送:*daniel.daughe...@oracle.com<mailto:daniel.daughe...@oracle.com>; >>> serviceability-dev@openjdk.java.net >>> <mailto:serviceability-dev@openjdk.java.net> >>> *主题:*Re: Errors when use "universe" command in CLHSDB >>> >>> Yunda, >>> >>> I think this fixes http://bugs.sun.com/view_bug.do?bug_id=8005278 >>> >>> The changes look good to me. I couldn't apply the patch to the code >>> cleanly, however (see below). Perhaps the patch was broken in email? >>> Can you regenerate the patch and include it as a zipped attachment? >>> >>> Thanks, >>> >>> /Staffan >>> >>> file >>> agent/src/share/classes/sun/jvm/hotspot/memory/AFLBinaryTreeDictionary >>> .java >>> already exists >>> 1 out of 1 hunks FAILED -- saving rejects to file >>> agent/src/share/classes/sun/jvm/hotspot/memory/AFLBinaryTreeDictionary >>> .java.rej >>> patching file >>> agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpac >>> e.java >>> Hunk #1 FAILED at 116 >>> Hunk #2 FAILED at 40 >>> 2 out of 2 hunks FAILED -- saving rejects to file >>> agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpac >>> e.java.rej >>> patching file >>> src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp >>> Hunk #1 succeeded at 45 with fuzz 2 (offset 0 lines). >>> patch failed, unable to continue (try -v) patch failed, rejects left >>> in working dir >>> >>> On 18 jan 2013, at 04:54,云达<yunda....@taobao.com >>> <mailto:yunda....@taobao.com>> wrote: >>> >>> >>> >>> >>> Thanks Dan! >>> >>> Regards, >>> >>> Yunda >>> >>> *发件人:*Daniel D. Daugherty [mailto:daniel.daughe...@oracle.com >>> <http://oracle.com>] >>> *发送时间:*2013年1月18日10:46 >>> *收件人:*云达;serviceability-dev@openjdk.java.net >>> <mailto:serviceability-dev@openjdk.java.net> >>> *主题:*Re: Errors when use "universe" command in CLHSDB >>> >>> Yunda, >>> >>> The Serviceability Agent is maintained by the Serviceability team. >>> I'm adding that alias to this e-mail thread (and Bcc'ing the Runtime >>> alias. >>> >>> Dan >>> >>> On 1/17/13 7:42 PM,云达wrote: >>> >>> Hi all, >>> >>> This is Yunda<yunda....@taobao.com> >>> <mailto:yunda....@taobao.com>from Alibaba Group(with OCA). >>> >>> When I used CLHSDB( java -classpath .:$JAVA_HOME/lib/sa-jdi.jar >>> sun.jvm.hotspot.CLHSDB) I found two errors below(the second error >>> occurred after I made some fix). It seemed that some code about CMS >>> in SA didn’t change accordingly. >>> >>> hsdb> universe >>> >>> Heap Parameters: >>> >>> Gen 0: eden >>> [0x0000000609200000,0x00000006094aeb90,0x0000000611820000) space >>> capacity = 140640256, 2.000007736049627 used >>> >>> from [0x0000000611820000,0x0000000611820000,0x00000006128e0000) >>> space capacity = 17563648, 0.0 used >>> >>> to [0x00000006128e0000,0x00000006128e0000,0x00000006139a0000) space >>> capacity = 17563648, 0.0 usedInvocations: 0 >>> >>> Gen 1: concurrent mark-sweep generation >>> >>> Exception in thread "main" java.lang.ExceptionInInitializerError >>> >>> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native >>> Method) >>> >>> at >>> >>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructo >>> rAccessorImpl.java:57) >>> >>> at >>> >>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingCo >>> nstructorAccessorImpl.java:45) >>> >>> at java.lang.reflect.Constructor.newInstance(Constructor.java:395) >>> >>> at >>> >>> sun.jvm.hotspot.runtime.VMObjectFactory.newObject(VMObjectFactory.java >>> :58) >>> >>> at >>> >>> sun.jvm.hotspot.memory.ConcurrentMarkSweepGeneration.cmsSpace(Concurre >>> ntMarkSweepGeneration.java:55) >>> >>> at >>> >>> sun.jvm.hotspot.memory.ConcurrentMarkSweepGeneration.printOn(Concurren >>> tMarkSweepGeneration.java:79) >>> >>> at >>> >>> sun.jvm.hotspot.memory.GenCollectedHeap.printOn(GenCollectedHeap.java: >>> 139) >>> >>> at >>> sun.jvm.hotspot.CommandProcessor$48.doit(CommandProcessor.java:1605) >>> >>> at >>> >>> sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java: >>> 1897) >>> >>> at >>> >>> sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java: >>> 1867) >>> >>> at >>> sun.jvm.hotspot.CommandProcessor.run(CommandProcessor.java:1747) >>> >>> at sun.jvm.hotspot.CLHSDB.run(CLHSDB.java:91) >>> >>> at sun.jvm.hotspot.CLHSDB.main(CLHSDB.java:35) >>> >>> Caused by: java.lang.RuntimeException: field "_dictionary" not found >>> in type CompactibleFreeListSpace >>> >>> at >>> sun.jvm.hotspot.types.basic.BasicType.getField(BasicType.java:183) >>> >>> at >>> sun.jvm.hotspot.types.basic.BasicType.getField(BasicType.java:190) >>> >>> at >>> sun.jvm.hotspot.types.basic.BasicType.getField(BasicType.java:194) >>> >>> at >>> >>> sun.jvm.hotspot.types.basic.BasicType.getAddressField(BasicType.java:2 >>> 82) >>> >>> at >>> >>> sun.jvm.hotspot.memory.CompactibleFreeListSpace.initialize(Compactible >>> FreeListSpace.java:69) >>> >>> at >>> >>> sun.jvm.hotspot.memory.CompactibleFreeListSpace.access$000(Compactible >>> FreeListSpace.java:35) >>> >>> at >>> >>> sun.jvm.hotspot.memory.CompactibleFreeListSpace$1.update(CompactibleFr >>> eeListSpace.java:55) >>> >>> at >>> sun.jvm.hotspot.runtime.VM.registerVMInitializedObserver(VM.java:402) >>> >>> at >>> >>> sun.jvm.hotspot.memory.CompactibleFreeListSpace.<clinit>(CompactibleFr >>> eeListSpace.java:53) >>> >>> ... 14 more >>> >>> hsdb> universe >>> >>> Heap Parameters: >>> >>> Gen 0: eden >>> [0x0000000609200000,0x00000006094aeb90,0x0000000611820000) space >>> capacity = 140640256, 2.000007736049627 used >>> >>> from [0x0000000611820000,0x0000000611820000,0x00000006128e0000) >>> space capacity = 17563648, 0.0 used >>> >>> to [0x00000006128e0000,0x00000006128e0000,0x00000006139a0000) space >>> capacity = 17563648, 0.0 usedInvocations: 0 >>> >>> Gen 1: concurrent mark-sweep generation >>> >>> free-list-space[ 0x000000064cb90000 , 0x0000000661ad0000 ) Exception >>> in thread "main" java.lang.ExceptionInInitializerError >>> >>> at >>> >>> sun.jvm.hotspot.memory.CompactibleFreeListSpace.free(CompactibleFreeLi >>> stSpace.java:112) >>> >>> at >>> >>> sun.jvm.hotspot.memory.CompactibleFreeListSpace.used(CompactibleFreeLi >>> stSpace.java:95) >>> >>> at >>> >>> sun.jvm.hotspot.memory.CompactibleFreeListSpace.printOn(CompactibleFre >>> eListSpace.java:137) >>> >>> at >>> >>> sun.jvm.hotspot.memory.ConcurrentMarkSweepGeneration.printOn(Concurren >>> tMarkSweepGeneration.java:79) >>> >>> at >>> >>> sun.jvm.hotspot.memory.GenCollectedHeap.printOn(GenCollectedHeap.java: >>> 139) >>> >>> at >>> sun.jvm.hotspot.CommandProcessor$48.doit(CommandProcessor.java:1605) >>> >>> at >>> >>> sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java: >>> 1897) >>> >>> at >>> >>> sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java: >>> 1867) >>> >>> at >>> sun.jvm.hotspot.CommandProcessor.run(CommandProcessor.java:1747) >>> >>> at sun.jvm.hotspot.CLHSDB.run(CLHSDB.java:91) >>> >>> at sun.jvm.hotspot.CLHSDB.main(CLHSDB.java:35) >>> >>> Caused by: java.lang.RuntimeException: No type named "FreeList" in >>> database >>> >>> at >>> >>> sun.jvm.hotspot.types.basic.BasicTypeDataBase.lookupType(BasicTypeData >>> Base.java:80) >>> >>> at >>> >>> sun.jvm.hotspot.HotSpotTypeDataBase.lookupType(HotSpotTypeDataBase.jav >>> a:134) >>> >>> at >>> >>> sun.jvm.hotspot.types.basic.BasicTypeDataBase.lookupType(BasicTypeData >>> Base.java:74) >>> >>> at sun.jvm.hotspot.memory.FreeList.initialize(FreeList.java:44) >>> >>> at sun.jvm.hotspot.memory.FreeList.access$000(FreeList.java:34) >>> >>> at sun.jvm.hotspot.memory.FreeList$1.update(FreeList.java:38) >>> >>> at >>> sun.jvm.hotspot.runtime.VM.registerVMInitializedObserver(VM.java:402) >>> >>> at sun.jvm.hotspot.memory.FreeList.<clinit>(FreeList.java:36) >>> >>> ... 11 more >>> >>> So I made a patch to fix them and now “universe” command works well. >>> Could someone help to review the patch below? >>> >>> diff -r b14da2e6f2dc -r 8652e04889a4 >>> >>> agent/src/share/classes/sun/jvm/hotspot/memory/AFLBinaryTreeDictionary >>> .java >>> >>> --- /dev/null Thu Jan 01 00:00:00 1970 +0000 >>> >>> +++ >>> >>> b/agent/src/share/classes/sun/jvm/hotspot/memory/AFLBinaryTreeDictionary.java >>> Fri Jan 18 09:56:06 2013 +0800 >>> >>> @@ -0,0 +1,59 @@ >>> >>> +/* >>> >>> + * @(#)AFLBinaryTreeDictionary.java >>> >>> + * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All >>> rights reserved. >>> >>> + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. >>> >>> + * >>> >>> + * This code is free software; you can redistribute it and/or >>> modify it >>> >>> + * under the terms of the GNU General Public License version 2 >>> only, as >>> >>> + * published by the Free Software Foundation. >>> >>> + * >>> >>> + * This code is distributed in the hope that it will be useful, but >>> WITHOUT >>> >>> + * ANY WARRANTY; without even the implied warranty of >>> MERCHANTABILITY or >>> >>> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public >>> License >>> >>> + * version 2 for more details (a copy is included in the LICENSE >>> file that >>> >>> + * accompanied this code). >>> >>> + * >>> >>> + * You should have received a copy of the GNU General Public >>> License version >>> >>> + * 2 along with this work; if not, write to the Free Software >>> Foundation, >>> >>> + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. >>> >>> + * >>> >>> + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA >>> 94065 USA >>> >>> + * or visitwww.oracle.com<http://www.oracle.com>if you need >>> additional information or have any >>> >>> + * questions. >>> >>> + * >>> >>> + */ >>> >>> + >>> >>> +package sun.jvm.hotspot.memory; >>> >>> + >>> >>> +import java.util.*; >>> >>> +import sun.jvm.hotspot.debugger.*; >>> >>> +import sun.jvm.hotspot.types.*; >>> >>> +import sun.jvm.hotspot.runtime.*; >>> >>> + >>> >>> +public class AFLBinaryTreeDictionary extends VMObject { >>> >>> + static { >>> >>> + VM.registerVMInitializedObserver(new Observer() { >>> >>> + public void update(Observable o, Object data) { >>> >>> + initialize(VM.getVM().getTypeDataBase()); >>> >>> + } >>> >>> + }); >>> >>> + } >>> >>> + >>> >>> + private static synchronized void initialize(TypeDataBase db) { >>> >>> + Type type = db.lookupType("AFLBinaryTreeDictionary"); >>> >>> + totalSizeField = type.getCIntegerField("_total_size"); >>> >>> + } >>> >>> + >>> >>> + // Fields >>> >>> + private static CIntegerField totalSizeField; >>> >>> + >>> >>> + // Accessors >>> >>> + public long size() { >>> >>> + return totalSizeField.getValue(addr); >>> >>> + } >>> >>> + >>> >>> + // Constructor >>> >>> + public AFLBinaryTreeDictionary(Address addr) { >>> >>> + super(addr); >>> >>> + } >>> >>> +} >>> >>> diff -r b14da2e6f2dc -r 8652e04889a4 >>> >>> agent/src/share/classes/sun/jvm/hotspot/memory/BinaryTreeDictionary.ja >>> va >>> >>> --- >>> >>> a/agent/src/share/classes/sun/jvm/hotspot/memory/BinaryTreeDictionary.java >>> Thu Jan 17 13:40:31 2013 -0500 >>> >>> +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 >>> >>> @@ -1,59 +0,0 @@ >>> >>> -/* >>> >>> - * @(#)BinaryTreeDictionary.java >>> >>> - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All >>> rights reserved. >>> >>> - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. >>> >>> - * >>> >>> - * This code is free software; you can redistribute it and/or >>> modify it >>> >>> - * under the terms of the GNU General Public License version 2 >>> only, as >>> >>> - * published by the Free Software Foundation. >>> >>> - * >>> >>> - * This code is distributed in the hope that it will be useful, but >>> WITHOUT >>> >>> - * ANY WARRANTY; without even the implied warranty of >>> MERCHANTABILITY or >>> >>> - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public >>> License >>> >>> - * version 2 for more details (a copy is included in the LICENSE >>> file that >>> >>> - * accompanied this code). >>> >>> - * >>> >>> - * You should have received a copy of the GNU General Public >>> License version >>> >>> - * 2 along with this work; if not, write to the Free Software >>> Foundation, >>> >>> - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. >>> >>> - * >>> >>> - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA >>> 94065 USA >>> >>> - * or visitwww.oracle.com<http://www.oracle.com>if you need >>> additional information or have any >>> >>> - * questions. >>> >>> - * >>> >>> - */ >>> >>> - >>> >>> -package sun.jvm.hotspot.memory; >>> >>> - >>> >>> -import java.util.*; >>> >>> -import sun.jvm.hotspot.debugger.*; >>> >>> -import sun.jvm.hotspot.types.*; >>> >>> -import sun.jvm.hotspot.runtime.*; >>> >>> - >>> >>> -public class BinaryTreeDictionary extends VMObject { >>> >>> - static { >>> >>> - VM.registerVMInitializedObserver(new Observer() { >>> >>> - public void update(Observable o, Object data) { >>> >>> - initialize(VM.getVM().getTypeDataBase()); >>> >>> - } >>> >>> - }); >>> >>> - } >>> >>> - >>> >>> - private static synchronized void initialize(TypeDataBase db) { >>> >>> - Type type = db.lookupType("BinaryTreeDictionary"); >>> >>> - totalSizeField = type.getCIntegerField("_totalSize"); >>> >>> - } >>> >>> - >>> >>> - // Fields >>> >>> - private static CIntegerField totalSizeField; >>> >>> - >>> >>> - // Accessors >>> >>> - public long size() { >>> >>> - return totalSizeField.getValue(addr); >>> >>> - } >>> >>> - >>> >>> - // Constructor >>> >>> - public BinaryTreeDictionary(Address addr) { >>> >>> - super(addr); >>> >>> - } >>> >>> -} >>> >>> diff -r b14da2e6f2dc -r 8652e04889a4 >>> >>> agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpac >>> e.java >>> >>> --- >>> >>> a/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java >>> Thu Jan 17 13:40:31 2013 -0500 >>> >>> +++ >>> >>> b/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java >>> Fri Jan 18 09:56:06 2013 +0800 >>> >>> @@ -117,7 +117,7 @@ >>> >>> } >>> >>> // large block >>> >>> - BinaryTreeDictionary bfbd = (BinaryTreeDictionary) >>> VMObjectFactory.newObject(BinaryTreeDictionary.class, >>> >>> + AFLBinaryTreeDictionary bfbd = (AFLBinaryTreeDictionary) >>> VMObjectFactory.newObject(AFLBinaryTreeDictionary.class, >>> >>> dictionaryField.getValue(addr)); >>> >>> size += bfbd.size(); >>> >>> diff -r b14da2e6f2dc -r 8652e04889a4 >>> agent/src/share/classes/sun/jvm/hotspot/memory/FreeList.java >>> >>> --- a/agent/src/share/classes/sun/jvm/hotspot/memory/FreeList.java >>> Thu Jan 17 13:40:31 2013 -0500 >>> >>> +++ b/agent/src/share/classes/sun/jvm/hotspot/memory/FreeList.java >>> Fri Jan 18 09:56:06 2013 +0800 >>> >>> @@ -41,7 +41,7 @@ >>> >>> } >>> >>> private static synchronized void initialize(TypeDataBase db) { >>> >>> - Type type = db.lookupType("FreeList"); >>> >>> + Type type = db.lookupType("FreeList<FreeChunk>"); >>> >>> sizeField = type.getCIntegerField("_size"); >>> >>> countField = type.getCIntegerField("_count"); >>> >>> headerSize = type.getSize(); >>> >>> diff -r b14da2e6f2dc -r 8652e04889a4 >>> >>> src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp >>> >>> --- >>> a/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp >>> Thu Jan 17 13:40:31 2013 -0500 >>> >>> +++ >>> b/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp >>> Fri Jan 18 09:56:06 2013 +0800 >>> >>> @@ -43,7 +43,8 @@ >>> >>> nonstatic_field(LinearAllocBlock, _word_size, size_t) \ >>> >>> nonstatic_field(AFLBinaryTreeDictionary, _total_size, size_t) \ >>> >>> nonstatic_field(CompactibleFreeListSpace, _indexedFreeList[0], >>> FreeList<FreeChunk>) \ >>> >>> - nonstatic_field(CompactibleFreeListSpace, _smallLinearAllocBlock, >>> LinearAllocBlock) >>> >>> + nonstatic_field(CompactibleFreeListSpace, _smallLinearAllocBlock, >>> LinearAllocBlock) \ >>> >>> + nonstatic_field(CompactibleFreeListSpace, _dictionary, >>> FreeBlockDictionary<FreeChunk>*) >>> >>> #define VM_TYPES_CMS(declare_type, \ >>> >>> Regards, >>> >>> Yunda >>> >>> >>> ---------------------------------------------------------------------- >>> -- >>> >>> >>> This email (including any attachments) is confidential and may be >>> legally privileged. If you received this email in error, please >>> delete it immediately and do not copy it or use it for any purpose >>> or disclose its contents to any other person. Thank you. >>> >>> 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不是正确的收件 >>> 人,请您立即删除本邮件。请不要将本电邮进行复制并用作任何其他用途、或 >>> 透露本邮件之内容。谢谢。 >>> >>> ---------------------------------------------------------------------- >>> -- >>> >>> >>> This email (including any attachments) is confidential and may be >>> legally privileged. If you received this email in error, please delete >>> it immediately and do not copy it or use it for any purpose or >>> disclose its contents to any other person. Thank you. >>> >>> 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不是正确的收件人, >>> 请您立即删除本邮件。请不要将本电邮进行复制并用作任何其他用途、或透露本邮 >>> 件之内容。谢谢。 >>> >>> <tmp.zip> >>> >> >> ________________________________ >> >> This email (including any attachments) is confidential and may be legally >> privileged. If you received this email in error, please delete it >> immediately and do not copy it or use it for any purpose or disclose its >> contents to any other person. Thank you. >> >> 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不是正确的收件人,请您立即删除本邮件。请不要将本电邮进行复制并用作任何其他用途、或透露本邮件之内容。谢谢。