Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ObjectMap's find method can get stuck in an infinite loop. #745

Open
dotryen opened this issue Jan 21, 2025 · 1 comment
Open

ObjectMap's find method can get stuck in an infinite loop. #745

dotryen opened this issue Jan 21, 2025 · 1 comment

Comments

@dotryen
Copy link

dotryen commented Jan 21, 2025

Part of my engine uses a Map to keep track of calls for a certain function.

var list: Array<Component>;
var firstUpdates: Map<Component, Bool>;

function ME_StartCheck(): Void {
    for (comp in list) {
        if (!comp.Enabled) continue;
        if (firstUpdates[comp]) continue;
        comp.OnStart();
        firstUpdates[comp] = true;
    }
}

After enough calls the find method gets caught in an infinite loop thanks to ckey starting as zero and _MNEXT(m,c) also returning zero.

_MSTATIC _MVAL_TYPE *_MNAME(find)( t_map *m, t_key key ) {
	int c, ckey;
	unsigned int hash;

	if( !m->values ) return NULL;
	hash = _MNAME(hash)(key);
	ckey = hash % ((unsigned)m->ncells);
	c = _MINDEX(m,ckey);
	while( c >= 0 ) {
		if( _MMATCH(c) )
			return &m->values[c].value;
		c = _MNEXT(m,c);
	}
	return NULL;
}

I'm not familiar enough with HashLink to come to a conclusion on how this happens. But the objects I store in the map are never iterated over or constantly changing. The map also isn't created in C, it is only interacted with via Haxe code.

@ncannasse
Copy link
Member

ncannasse commented Jan 21, 2025 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants