Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 4d68584 in mainline


Ignore:
Timestamp:
2019-07-02T10:59:39Z (16 months ago)
Author:
Jaroslav Jindrak <dzejrou@…>
Branches:
master
Children:
09170ab8
Parents:
239d25b
Message:

cpp: add stub exception support

Location:
uspace/lib/cpp/include/__bits/thread
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/cpp/include/__bits/thread/packaged_task.hpp

    r239d25b r4d68584  
    3030#define LIBCPP_BITS_THREAD_PACKAGED_TASK
    3131
     32#include <__bits/exception.hpp>
    3233#include <__bits/functional/function.hpp>
    3334#include <__bits/thread/future.hpp>
     
    8485                    if (!state_->is_set())
    8586                    {
    86                         // TODO: store future_error
     87                        state_->set_exception(make_exception_ptr(
     88                            future_error{make_error_code(future_errc::broken_promise)}
     89                        ));
    8790                        state_->mark_set(true);
    8891                    }
     
    162165                    state_->set_value(invoke(func_, args...));
    163166                }
    164                 catch(...)
    165                 {
    166                     // TODO: store it
     167                catch(const exception& __exception)
     168                {
     169                    state_->set_exception(make_exception_ptr(__exception));
    167170                }
    168171            }
  • uspace/lib/cpp/include/__bits/thread/promise.hpp

    r239d25b r4d68584  
    3030#define LIBCPP_BITS_THREAD_PROMISE
    3131
     32#include <__bits/exception.hpp>
    3233#include <__bits/thread/future.hpp>
    3334#include <__bits/thread/shared_state.hpp>
     
    9495                }
    9596
    96                 void set_exception_at_thread_exit(exception_ptr)
    97                 {
    98                     // TODO: No exception handling, no-op at this time.
     97                void set_exception_at_thread_exit(exception_ptr ptr)
     98                {
     99                    assert(state_);
     100
     101                    state_->set_exception_ptr(ptr, false);
     102                    // TODO: Mark it as 'has_exception' when thread terminates.
    99103                }
    100104
     
    117121                    if (!state_->is_set())
    118122                    {
    119                         // TODO: Store future_error.
     123                        state_->set_exception(make_exception_ptr(
     124                            future_error{make_error_code(future_errc::broken_promise)}
     125                        ));
    120126                        state_->mark_set(true);
    121127                    }
  • uspace/lib/cpp/include/__bits/thread/shared_state.hpp

    r239d25b r4d68584  
    7676            }
    7777
    78             void set_exception(exception_ptr ptr)
     78            void set_exception(exception_ptr ptr, bool set = true)
    7979            {
    8080                exception_ = ptr;
    81                 has_exception_ = true;
     81                has_exception_ = set;
    8282            }
    8383
     
    8989            void throw_stored_exception() const
    9090            {
    91                 // TODO: implement
     91                if (has_exception_)
     92                    rethrow_exception(exception_);
    9293            }
    9394
     
    266267                            }
    267268                        }
    268                         catch(...) // TODO: Any exception.
     269                        catch(const exception& __exception)
    269270                        {
    270                             // TODO: Store it.
     271                            this->set_exception(make_exception_ptr(__exception));
    271272                        }
    272273                    }
     
    351352                    }
    352353                }
    353                 catch(...)
     354                catch(const exception& __exception)
    354355                {
    355                     // TODO: Store it.
     356                    this->set_exception(make_exception_ptr(__exception));
    356357                }
    357358            }
Note: See TracChangeset for help on using the changeset viewer.