Prev: 837858 Up to date Net and Tech news, knowledge, empowerment 41
Next: Software documentation : and you ?
From: Maksymilian Boguń on 22 Jan 2010 11:26 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 22 Jan 2010 11:51 -----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 23 Jan 2010 11:37
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 |