Hello!

This is my weekly ChangeLog, from 16 January 2017 to 22 January 2017.
You can see it in a better format by going here: http://log.smallworks.eu

ChangeLog
=========

20 January 2017:
----------------

  * I'm still fixing a couple of final failing tests on iceberg, 
    multi-remotes branch. Problem is that there are still somethings to 
understand
    on the "command line 
    backend" (we need to find a better name for this), and the #pushTo: method: 
if I
    do it as I 
    think is correct, a couple of failing tests appear... but then, I need to
    reflect if this is 
    a problem on the functionality or on the tests.

19 January 2017:
----------------

  * I think I finally got the problem with FT2Plugin! 
    Yesterday night talking in slack I realised that there was actually 
duplicated
    instances of 
    FT2Handle hierarchy with exactly same handle  (pointer address). This, of
    course, causes a double free when those instances are released... and 
    that's the VM crash :)
    So I quickly sketched a workaround, that you can see here: 
    FT2Handle>>pvtDestroyHandle
    "This should only be sent from the finalizer. 
    It runs inside a mutex because in strange cases it can happen that this is
    executed twice, 
    causing a primitiveFailed to be raised."
    self class destroyMutex critical: [ | handleToRelease |
    self isValid ifFalse: [ ^self ].
    handleToRelease := self handle copy.
    self primDestroyHandle.
    "This is super-ugly, but it will prevent duplicated handles to be released"
    FT2Handle allSubInstancesDo: [ :each | 
    (handleToRelease = each handle) ifTrue: [ each beNull ] ] ] 
    and so far nobody who is testing it crashed! 
    This can be important, but of course... now we need to realise why the
    duplicated instances are happening.
  * I spent some time preparing a new way to annoy people :)
    I prepared a way to send a digest mail about my activity (this stream) to
    pharo-dev list.
    I hope it will not be too much.

18 January 2017:
----------------

  * ... and still some more work on iceberg, this time making some test 
    pass on the command line backend (who is just a fallback, but well... we 
still
    need it around).
  * Still working on UFFI 64bits. Now I introduced a new hierarchy, 
FFIArchitecture
    for now with two children: 
    * FFI_i386
    * FFI_x86_64
    the purpose is obvious: to allow UFFI to handle differences between 
different
    architectures (for example, 
    long has to be parsed to FFIInt32 in i386 and to FFIInt64 in x86_64).

17 January 2017:
----------------

  * I'm working on the UFFI support for 64bits. 
    In general, it works fine, but there is a huge problem with structures. 
What's
    this problem? Well, let's take
    this simple structure as example: 
    struct point {
    unsigned long x;
    unsigned long y;
    }
    Well, thing is in 32bits sizeof(struct point) = 8 while in 64bits 
sizeof(struct
    point) = 16, and of 
    course this breaks our current implementation which would be something like 
this
    StructPoint>>x
    ^ handle unsignedLongAt: 1
    StructPoint>>y
    ^ handle unsignedLongAt: 5
    and of course, this is not correct for 64bits. 
    My solution is quite simple, instead hardcoding the field offsets, I store 
those
    values into class variables
    that can be calculated each session (but just once).
    So, this structure would end looking like this: 
    StructPoint>>x
    ^ handle unsignedLongAt: OFFSET_X
    StructPoint>>y
    ^ handle unsignedLongAt: OFFSET_Y
    this would solve the problem for most of the cases, but there is still the 
issue
    that emerges when complete
    implementation of the struct changes between platforms. I'm planning to
    implement a strategy pattern to solve 
    this, but not yet (probably I will wait until having a concrete case).
    This seems to be working, but now I have other problems not related to UFFI:
    many people has implemented 
    void * parameters of funtions as unsigned long (including me, time ago) 
which
    was correct in 32bits but 
    it is not in 64bits. So now I need to review this implementations to see 
where a
    fix is needed.
    But this is not directly a problem of UFFI, I think.
  * I worked with Nico on fixing libgit2 backend tests for iceberg. 
    Now (more thanks to Nico than me, heh), test for multi-remotes branch are
    passing for linux but 
    still not for macOS (and forget it about Pharo 5.0). 
    I suspect a problem with VM, I need to review if I can configure 
smalltalkci 
    to work with latest vm instead stable. 

15 January 2017:
----------------

  * ... and now I restored the posix permissions to windows platform. Next 
latest VM
    will have this change, I 
    hope that will end the problems with FilePlugin, but we'll see.
  * I just fixed a problem with FilePlugin on macOS: the problem was when
    determining if a symlink is also a 
    directory: 
    ‘/tmp’ asFileReference isDirectory 
    was answering false, because it is a symlink and when trying to resolve the
    symlink to obtain the 
    attributes, there was a cyclic condition that was transforming ‘/tmp’ 
into
    ‘/private/tmp’ and then 
    back to ‘/tmp’, and because of that the test for directory was failing. 

cheers! 
Esteban

Reply via email to