From: Maksymilian Boguń on
Hi!
I created a protected object with a private array of records. When I
want to update the elements of this array, I use a procedure in this
protected object. The important part is:

My_Bird := Birds(Bird_I);
if not My_Bird.Alive then
return;
end if;
My_Bird.Alive := False;
Birds(Bird_I) := My_Bird;

When running with debugger, I can see, that Birds(Bird_I).Alive is
False after this code is executed. However, when I switch to another
task and call this procedure again Birds(Bird_I).Alive is still True.
The array is not modified anywhere else, only through this protected
object. What is wrong, why doesn't it work?

Cheers,
-- Max
From: xavier grave on
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Maksymilian Boguń a écrit :
> Hi!
> I created a protected object with a private array of records. When I
> want to update the elements of this array, I use a procedure in this
> protected object. The important part is:
>
> My_Bird := Birds(Bird_I);
> if not My_Bird.Alive then
> return;
> end if;
> My_Bird.Alive := False;
> Birds(Bird_I) := My_Bird;
>
> When running with debugger, I can see, that Birds(Bird_I).Alive is
> False after this code is executed. However, when I switch to another
> task and call this procedure again Birds(Bird_I).Alive is still True.
> The array is not modified anywhere else, only through this protected
> object. What is wrong, why doesn't it work?

Can you add a little more code ?
the protected type declaration for example
or best of all : a simple test_case where this code is ?

xavier
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAktZ15wACgkQVIZi0A5BZF4yzwCeM7Zhw5LlstKVWpciBpDliZhC
JLMAoKxC6mE4Zge8Ejj/mKJOdD6yAx0G
=od/+
-----END PGP SIGNATURE-----
From: Maksymilian Boguń on
On 22 Sty, 17:51, xavier grave <xavier.gr...(a)ipno.in2p3.fr> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Maksymilian Boguń a écrit :
>
>
>
> > Hi!
> > I created a protected object with a private array of records. When I
> > want to update the elements of this array, I use a procedure in this
> > protected object. The important part is:
>
> > My_Bird := Birds(Bird_I);
> > if not My_Bird.Alive then
> >    return;
> > end if;
> > My_Bird.Alive := False;
> > Birds(Bird_I) := My_Bird;
>
> > When running with debugger, I can see, that Birds(Bird_I).Alive is
> > False after this code is executed. However, when I switch to another
> > task and call this procedure again Birds(Bird_I).Alive is still True.
> > The array is not modified anywhere else, only through this protected
> > object. What is wrong, why doesn't it work?
>
> Can you add a little more code ?
> the protected type declaration for example
> or best of all : a simple test_case where this code is ?
>
> xavier
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
> Comment: Using GnuPG with Mozilla -http://enigmail.mozdev.org
>
> iEYEARECAAYFAktZ15wACgkQVIZi0A5BZF4yzwCeM7Zhw5LlstKVWpciBpDliZhC
> JLMAoKxC6mE4Zge8Ejj/mKJOdD6yAx0G
> =od/+
> -----END PGP SIGNATURE-----

Ah, nevermind, I solved the problem - it was a race condition in a
totally different part of the program :)
I really hate multithreaded programming :(

Cheers,
-- Max