On Fri, Oct 25, 2013 at 10:31 AM, Alexandre Julliard <julliard@winehq.org> wrote:
George Stephanos <gaf.stephanos@gmail.com> writes:

> � � You need some sort of free list instead of a linear search.
>
> Alright.
>
> � � Also you can probably avoid one level of pointers and store
> � � objects directly.
>
>
> I thought about this. If I store objects directly, accessing any would
> require a lock on the whole table so I guarantee it's not moved or
> reallocated elsewhere. This would obviously be pretty slow.

You already have a lock on the whole table anyway.

I do. But it's only used when creating new handles or on table reallocations.
Earlier I could reallocate the table without worrying about the handles.

In your case that same lock would have to be grabbed when�
*accessing* any of the handles so I make sure the table is�
not being reallocated.
That results in: no two handles can be accessed concurrently as opposed�
to my current code where they can.
I might be missing something though :|


> � � Returning a pointer to the object outside of the critical section
> � � is not
> � � a good idea.
>
> The critical section just protects the table and not the
> handles/structs themselves.

Yes, that's the problem. The structs have to be protected too.

Maybe a lock inside each struct?

--
Alexandre Julliard
julliard@winehq.org