Bug 317700 (MONO74613) - Mono.C5 or Runtime regression
Summary: Mono.C5 or Runtime regression
Status: RESOLVED INVALID
Alias: MONO74613
Product: Mono: Runtime
Classification: Mono
Component: misc (show other bugs)
Version: 1.1
Hardware: Other Windows XP
: P3 - Medium : Normal
Target Milestone: ---
Assignee: Martin Baulig
QA Contact: Mono Bugs
URL:
Whiteboard:
Keywords: qa
Depends on:
Blocks:
 
Reported: 2005-04-15 08:08 UTC by mikeluwork
Modified: 2007-09-15 21:24 UTC (History)
1 user (show)

See Also:
Found By: ---
Services Priority:
Business Priority:
Blocker: ---
Marketing QA Status: ---
IT Deployment: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Thomas Wiest 2007-09-15 19:13:27 UTC


---- Reported by mikeluwork@hotmail.com 2005-04-15 01:08:15 MST ----

Description of Problem:

The csharp source file <hash2gmono.cs> compiles fine with gmcs under both
mono-1.1.4 and mono-1.1.6. However, the .exe file runs without any problem
under 1.1.4 but failed quickly with 1.1.6. (source file attached)

Steps to reproduce the problem:
1. gmcs hash2gmono.cs
2. mono hash2gmono.exe 150
3. that's it.

Actual Results:
* with mono-1.1.6(win32), 
----------------------
hashtable creation took 20 milliseconds


Unhandled Exception: System.NullReferenceException: Object reference not
set to an instance of an object
in <0x00021> C5.DefaultReferenceTypeHasher`1[System.String]:Equals
(System.String , System.String )
in <0x0001d> C5.KeyValuePairHasher`2[System.String,System.Int32]:Equals
(KeyValuePair`2 , KeyValuePair`2 )
in <0x0004a>
C5.HashSet`1[C5.KeyValuePair`2[System.String,System.Int32]]:isnull
(KeyValuePair`2 )
in <0x00218>
C5.HashSet`1[C5.KeyValuePair`2[System.String,System.Int32]]:searchoradd
(C5.KeyValuePair`2 , Boolean , Boo
ean )
in <0x00021>
C5.HashSet`1[C5.KeyValuePair`2[System.String,System.Int32]]:Add
(KeyValuePair`2 )
in <0x00049> C5.DictionaryBase`2[System.String,System.Int32]:Add
(System.String , Int32 )
in <0x00259> App:Main2 (System.String[] args)
in <0x0002c> App:Main (System.String[] args)
-------------------------

Expected Results:
no problem with mono-1.1.4(win32)
-------------------------
hashtable creation took 30 milliseconds

hash1 initialization took 50 milliseconds

manipulating hash2 took 1553 milliseconds

1 9999 150 1499850
1763 milliseconds
-------------------------


How often does this happen? 
* always the case

Additional Information:
------------- attached is the cs file ---------------
// $Id: hash2.csharp,v 1.0 2002/02/14 15:01:00 dada Exp $
// http://dada.perl.it/shootout/

using System;
//using System.Collections;
//using System.Collections.Generic;
using C5;
using MSG = System.Collections.Generic;

class App {
		public static void Main(String[] args) 
		{
			DateTime	t1 = DateTime.Now;
			Main2(args);
			DateTime	t2 = DateTime.Now;
			Console.WriteLine("{0} milliseconds\n", (t2 - t1).TotalMilliseconds);
		}
    public static void Main2(String[] args) {        
        int n = 1;
        try {        
        	n = System.Convert.ToInt32(args[0]);
    	} catch {
	    	n = 1;
    	}
    	
        if(n < 1) n = 1;
			DateTime	t1 = DateTime.Now;
			
//         Hashtable hash1 = new Hashtable(10000, (float)0.75);
//         Hashtable hash2 = new Hashtable(10000, (float)0.75);
//         Dictionary<string, int> hash1 = new Dictionary<string, int>( 12899);
//         Dictionary<string, int> hash2 = new Dictionary<string, int>( 12899);
         HashDictionary<string, int> hash1 = new HashDictionary<string,
int>(10000, 0.75, 
         	new DefaultReferenceTypeHasher<string>());
         HashDictionary<string, int> hash2 = new HashDictionary<string,
int>(10000, 0.75, 
         	new DefaultReferenceTypeHasher<string>());
        //Hashtable hash2 = new Hashtable(15000);
//          HashDictionary<string, int> hash1 = new HashDictionary<string,
int>();
//          HashDictionary<string, int> hash2 = new HashDictionary<string,
int>();
			DateTime	t2 = DateTime.Now;
			Console.WriteLine("hashtable creation took {0} milliseconds\n", (t2 -
t1).TotalMilliseconds);
			
			DateTime	t3 = DateTime.Now;
        for(int i=0; i<10000; i++) {
            hash1.Add( "foo_" + i.ToString(), i);
            //hash1.Add( "foo_" + i, new Val(i));
            //hash1.Add(i, new Val(i));
        }
			DateTime	t4 = DateTime.Now;
			Console.WriteLine("hash1 initialization took {0} milliseconds\n", (t4 -
t3).TotalMilliseconds);
        
			DateTime	t5 = DateTime.Now;
        int v1;
//         String	key;
        string	key;
        for(int i = 0; i < n; i++) {
            //HashDictionary<string,int>.Enumerator it = hash1.GetEnumerator();
            //IEnumerator	it = hash1.Keys.GetEnumerator();
            //MSG.IEnumerator<KeyValuePair<string,int>> it =
hash1.GetEnumerator();
            //while(it.MoveNext()) {
	        foreach (KeyValuePair<string, int> it in hash1) {    
                //v1 = ((Val)it.Value).val;
//                 key = (String)it.Key;
//                 key = it.Current.key;
//                 v1 = it.Current.value;
                key = it.key;
                v1 = it.value;
//                 key = it.Current.Key;
                //v1 = hash1[key];
//                 v1 = it.Current.Value;
//                 if(hash2.ContainsKey(key)) {
                //if(hash2.Contains(key)) {
	            try {
                    //int v1 = (int) hash1[it.Key];
                    //int v2 = (int) hash2[it.Key];                
                    hash2[key] += v1;
                    //int v1 = ((Val)hash1[it.Key]).val;
                    //int v2 = ((Val)hash2[it.Key]).val;                
                    //((Val)hash2[key]).val += v1;
                } 
                //else {
	            catch {
                    hash2.Add(key, v1);
                    //hash2.Add(key, new Val(v1));
                }
            }
        }
			DateTime	t6 = DateTime.Now;
			Console.WriteLine("manipulating hash2 took {0} milliseconds\n", (t6 -
t5).TotalMilliseconds);
        Console.WriteLine(hash1["foo_1"] + " " + hash1["foo_9999"] + " " +
hash2["foo_1"] + " " + hash2["foo_9999"]);
        //Console.WriteLine(hash1[1] + " " + hash1[9999] + " " + hash2[1] +
" " + hash2[9999]);
        //return(0);
    }
}

------- END ----------



---- Additional Comments From martin@ximian.com 2005-04-15 05:20:50 MST ----

Setting priority to Minor for the moment - this is most likely NOTABUG
since there is some runtime problem at the moment.



---- Additional Comments From martin@ximian.com 2005-04-29 08:34:06 MST ----

Can't reproduce this.


Unknown bug field "cf_op_sys_details" encountered while moving bug
   <cf_op_sys_details>Windows XP Home SP2</cf_op_sys_details>